Объедините 2 изображения бок о бок в 1 с ImageMagick (PHP)
Я думаю, что это легко.
У меня есть 2 картинки /JPG, и я хочу, чтобы они слились в одно изображение, где 2 находятся бок о бок.
Итак, у меня есть pic [A] и pic [B], и я хочу получить pic [AB] (бок о бок).
Оба изображения имеют одинаковую ширину и высоту. В этом случае ширина = 200px и height = 300px. Но второе изображение должно появиться в позиции 200,0.. также, когда ширина изображения меньше 200 пикселей (200 пикселей - макс. Ширина)
Это то, что я пробовал (php):
exec($IMAGEMAGICK_PATH."composite picA.jpg -geometry +200+0 picB.jpg picAB.jpg");
Я также пробовал то же самое с "-размер 400 × 300" после "композитного", но ничего не происходит.
Проблема в том, что изображение picA.jpg перемещается на 200 пикселей и сливается в picB.jpg, но ширина picAB.jpg такая же, как у picB.jpg.
Я также не уверен, что правильная команда "-geometry".
Ответы
Ответ 1
Вот командная строка для добавления изображения из-за расширенных требований, где правый снимок должен быть смещен на 200 пикселей от левого края, независимо от (меньшей) ширины левого изображения:
convert \
-background '#FFF9E3' \
xc:none -resize 200x1\! \
right+narrow.png -append \
left+wider.png \
-gravity south \
+append \
-crop '400x +0+1' \
+repage \
result.png
Часть xc:none -resize 200x1\!
создает высоту в 1 пиксель, длину 200 пикселей и вертикально добавляет к ней меньшее (правое) изображение.
К этому промежуточному результату происходит горизонтальное добавление более широкого (левого) изображения. Теперь у нас будет изображение размером 401x100 с, возможно, уродливой линией прозрачных пикселей сверху.
Вот почему мы сбрасываем эту верхнюю пиксельную строку с помощью функции -crop
.
Вы должны перенести это на PHP самостоятельно...: -)
Ответ 2
Не нужно использовать -geometry
, если оба файла имеют одинаковый размер. Попробуйте
exec($IMAGEMAGICK_PATH."convert picA.jpg picB.jpg +append picAB.jpg");
Используйте -append
, если вы хотите объединить изображения в столбце.
Добавьте -background none
или -background black
или -background white
или что угодно, если ваши изображения не того же размера. В этом случае вы также можете добавить -gravity center
или -gravity south
или некоторые из них, чтобы определить, как слияние двух изображений. -gravity
должен появиться перед +-append
в командной строке:
exec($IMAGEMAGICK_PATH."convert big.jpg small.jpg -gravity east -append 2x.jpg");
Ответ 3
Возможно, вы поймете, что метод montage
легче понять (это, вероятно, то, что вы имели в виду, когда вы пробовали его с помощью composite
), но это одно для перекрывающихся изображений, а не для бок о бок монтаж...)
montage \
-background '#FFF9E3' \
-geometry 200\!x\> \
-gravity west \
right+narrow.jpg \
left+wider.jpg \
result.jpg
Ответ 4
Здесь код PHP, который я использую в Kinoulink (французский запуск):
$im1 = new \Imagick($media1);
$im2 = new \Imagick($media2);
$imTotal = new \Imagick();
$im1->cropthumbnailimage(62, 128);
$im2->cropthumbnailimage(62, 128);
$imTotal->newimage(128, 128, '#ffffffff');
$imTotal->compositeimage($im1, \Imagick::COMPOSITE_DEFAULT, 0, 0);
$imTotal->compositeimage($im2, \Imagick::COMPOSITE_DEFAULT, 66, 0);
$imTotal->writeimage($albumCoverFilePath);