Требуется совместить 2 изображения в разных точках соприкосновения. Допустим, 2 изображения 100х100 (с выбранной точкой 90х90) и 50х50 (с выбранной точкой 10х10) Очевидно, посчитав, мы получим размер итогового изображения 130х130. Но вопрос - как это можно выяснить кодом? Может проблема уже решена?
Методом тыка подобрал формулы: Ширина Конечного Изображения = СмещениеХ Изображения1 + (Ширина Изображения2 - СмещениеХ Изображения2) Высота Конечного Изображения = СмещениеУ Изображения1 + (Высота Изображения2 - СмещениеУ Изображения2) Проверяю... --- Добавлено --- В таком случае формулы не работают. Что-то нужно дополнительно вычислять..
Поразмыслив еще, я понял, что формула меняется в зависимости от расположения точек смещения в четвертях плоскости... Закралось сомнение, что есть универсальное решение... Никак в голову не приходит.. Ш - ширина, С - смещение
PHP: $img1 = [100,200]; // w,h $pnt1 = [mt_rand(0,$img1[0]), mt_rand(0,$img1[1])]; // w,h $img2 = [300,200]; // w,h $pnt2 = [mt_rand(0,$img2[0]), mt_rand(0,$img2[1])]; // w,h echo 'image1 WxH:'.join('x',$img1).' Point1 LEFTxTOP:'.join('x',$pnt1).'<br />'; echo 'image2 WxH:'.join('x',$img2).' Point2 LEFTxTOP:'.join('x',$pnt2) .'<br />'; echo 'Final image WxH: ' . join('x', getResultImageSize($img1,$pnt1, $img2,$pnt2) ).'<br />'; function getResultImageSize($img1, $pnt1, $img2, $pnt2) { // horizontal parts of first image $h1 = [$pnt1[0], $img1[0]-$pnt1[0]]; // vertical parts of first image $v1 = [$pnt1[1], $img1[1]-$pnt1[1]]; // horizontal parts of second image $h2 = [$pnt2[0], $img2[0]-$pnt2[0]]; // vertical parts of second image $v2 = [$pnt2[1], $img2[1]-$pnt2[1]]; // Calculate size of out image $w = max($h1[0], $h2[0]) + max($h1[1],$h2[1]); $h = max($v1[0], $v2[0]) + max($v1[1],$v2[1]); return [$w, $h]; }
Хосподя, это математика за 4 класс. Считай что одна из картинок начинается от начала координат, а другая накладывается с заданным смещением. По каждой из осей X и Y тебе надо найти минимальные и максимальные значения для картинки 1 и картинки 2. Всё! min() и max() от двух значений для каждой оси. Ширина или высота это разница между min и max.
Вы просто гений и мой спаситель. Всю голову вчера сломал. А такой вопрос. Теперь у нас есть координаты изображений, смещения и размер конечного изображения. Как правильно их наложить друг на друга? Я так понимаю, это будет зависеть от расположения точек смещения в четвертях координатной плоскости? Или надо как-то узнать, какое из изображений должно быть наложено сперва? --- Добавлено --- А я вот, к сожалению, не додумался..... Хотя, надо еще несколько раз прочитать Ваше сообщение, чтобы полностью понять, что яупустил из вида...
вам виднее. зависит от изначальной задачи. что вы вообще делаете? что это за изображения? с какой целью они накладываются. что должно получится в итоге. зная ответы на эти вопросы. можно будет сказать как это сделать лучше.
Есть игра и в ней пиксельная карта. Общая задача такая - делается скриншот №1, проходим несколько километров, делаем скриншот №2. Оба загружаются на домен, указываются точки связывания. На основе этих данных одна карта накладывается на другую и, по сути, создается большая карта. И на эту большую можно будет закреплять скриншоты №3, 4, 5 и т.д. И получается большая карта местности. Задача вот такая...
Не нашел ни одной подходящей программы... Штук 10 скачал - ни одна не удовлетворила запрос. Поэтому, up темы:
изображения есть. точки привязки есть. конечный размер карты есть. создаем пустую картинку конечного размера. накладываем одно изображение. потом другое. сохраняем. сейчас в чем проблема?
В этом и проблема. Как понять, какое изображение необходимо наложить первым? Ведь из-за того, что какое-то изображение будет наложено первым (будут указаны координаты верхнего левого угла 0,0) должно быть рассчитано, какое изображение будет вторым, ведь если его точки смещения будут больше, чем у первого, то возникнет конфликт. Или мне кажется? К примеру, красное - это канва, которую мы рассчитали. На нее наложили в 0,0 > w,h первое изображение. А затем на основе смещений пытаемся наложить второе. Разве, не срежется второе, выходя за рамки канвы?
ну у вас же есть все координаты, размеры и точки привязки. по ним понятно какое изображение где(какое выше, левее, правее, ниже..). если непонятно ещё, то напишите код который это анализирует и определяет. зная это, нет проблемы понять в какую часть канвы какое поместить. мне кажется.