За последние 24 часа нас посетили 17952 программиста и 1716 роботов. Сейчас ищут 1918 программистов ...

Как узнать размер конечного изображения?

Тема в разделе "PHP для новичков", создана пользователем EndoCrinolog, 4 авг 2018.

  1. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Требуется совместить 2 изображения в разных точках соприкосновения. [​IMG]

    Допустим, 2 изображения 100х100 (с выбранной точкой 90х90) и 50х50 (с выбранной точкой 10х10)
    [​IMG]

    Очевидно, посчитав, мы получим размер итогового изображения 130х130.

    Но вопрос - как это можно выяснить кодом? Может проблема уже решена?
     
  2. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Методом тыка подобрал формулы:
    Ширина Конечного Изображения = СмещениеХ Изображения1 + (Ширина Изображения2 - СмещениеХ Изображения2)
    Высота Конечного Изображения = СмещениеУ Изображения1 + (Высота Изображения2 - СмещениеУ Изображения2)

    Проверяю...
    --- Добавлено ---
    В таком случае формулы не работают. Что-то нужно дополнительно вычислять..

    [​IMG]
     
  3. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Поразмыслив еще, я понял, что формула меняется в зависимости от расположения точек смещения в четвертях плоскости... Закралось сомнение, что есть универсальное решение... Никак в голову не приходит..

    Ш - ширина, С - смещение

    [​IMG]
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. $img1 = [100,200]; // w,h
    2. $pnt1 = [mt_rand(0,$img1[0]), mt_rand(0,$img1[1])]; // w,h
    3.  
    4. $img2 = [300,200]; // w,h
    5. $pnt2 = [mt_rand(0,$img2[0]), mt_rand(0,$img2[1])]; // w,h
    6.  
    7. echo 'image1 WxH:'.join('x',$img1).'  Point1 LEFTxTOP:'.join('x',$pnt1).'<br />';
    8. echo 'image2 WxH:'.join('x',$img2).'  Point2 LEFTxTOP:'.join('x',$pnt2) .'<br />';
    9. echo 'Final image WxH: ' . join('x', getResultImageSize($img1,$pnt1, $img2,$pnt2) ).'<br />';
    10.  
    11. function getResultImageSize($img1, $pnt1, $img2, $pnt2) {
    12.     // horizontal parts of first image
    13.     $h1 = [$pnt1[0], $img1[0]-$pnt1[0]];
    14.     // vertical parts of first image
    15.     $v1 = [$pnt1[1], $img1[1]-$pnt1[1]];
    16.     // horizontal parts of second image
    17.     $h2 = [$pnt2[0], $img2[0]-$pnt2[0]];
    18.     // vertical parts of second image
    19.     $v2 = [$pnt2[1], $img2[1]-$pnt2[1]];
    20.  
    21.     // Calculate size of out image
    22.     $w = max($h1[0], $h2[0]) + max($h1[1],$h2[1]);
    23.     $h = max($v1[0], $v2[0]) + max($v1[1],$v2[1]);
    24.  
    25.     return [$w, $h];
    26. }
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Хосподя, это математика за 4 класс. Считай что одна из картинок начинается от начала координат, а другая накладывается с заданным смещением. По каждой из осей X и Y тебе надо найти минимальные и максимальные значения для картинки 1 и картинки 2. Всё!
    min() и max() от двух значений для каждой оси. Ширина или высота это разница между min и max.
     
  6. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Вы просто гений и мой спаситель. Всю голову вчера сломал. А такой вопрос. Теперь у нас есть координаты изображений, смещения и размер конечного изображения. Как правильно их наложить друг на друга? Я так понимаю, это будет зависеть от расположения точек смещения в четвертях координатной плоскости? Или надо как-то узнать, какое из изображений должно быть наложено сперва?
    --- Добавлено ---
    А я вот, к сожалению, не додумался..... Хотя, надо еще несколько раз прочитать Ваше сообщение, чтобы полностью понять, что яупустил из вида...
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    вам виднее.
    зависит от изначальной задачи. что вы вообще делаете? что это за изображения? с какой целью они накладываются. что должно получится в итоге. зная ответы на эти вопросы. можно будет сказать как это сделать лучше.
     
  8. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Есть игра и в ней пиксельная карта. Общая задача такая - делается скриншот №1, проходим несколько километров, делаем скриншот №2. Оба загружаются на домен, указываются точки связывания. На основе этих данных одна карта накладывается на другую и, по сути, создается большая карта. И на эту большую можно будет закреплять скриншоты №3, 4, 5 и т.д. И получается большая карта местности. Задача вот такая...
     
  9. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Скорее всего, я изобретаю велосипед. Я так понимаю, уже есть готоBblе инструментbl?
     
  10. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Не нашел ни одной подходящей программы... Штук 10 скачал - ни одна не удовлетворила запрос. Поэтому, up темы:
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    изображения есть. точки привязки есть. конечный размер карты есть.
    создаем пустую картинку конечного размера. накладываем одно изображение. потом другое. сохраняем.
    сейчас в чем проблема?
     
  12. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    В этом и проблема. Как понять, какое изображение необходимо наложить первым? Ведь из-за того, что какое-то изображение будет наложено первым (будут указаны координаты верхнего левого угла 0,0) должно быть рассчитано, какое изображение будет вторым, ведь если его точки смещения будут больше, чем у первого, то возникнет конфликт. Или мне кажется?
    К примеру, красное - это канва, которую мы рассчитали. На нее наложили в 0,0 > w,h первое изображение. А затем на основе смещений пытаемся наложить второе. Разве, не срежется второе, выходя за рамки канвы? [​IMG]
     
  13. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
  14. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ну у вас же есть все координаты, размеры и точки привязки. по ним понятно какое изображение где(какое выше, левее, правее, ниже..).
    если непонятно ещё, то напишите код который это анализирует и определяет.
    зная это, нет проблемы понять в какую часть канвы какое поместить. мне кажется.