11

我认为这是一件容易的事。

我有 2 张图片/JPG,我希望它们合并成一张图片,其中 2 张并排。

所以我有图片 [A] 和图片 [B],我想得到图片 [AB](并排)。

两个图像具有相同的宽度和高度。在这种情况下,宽度 = 200 像素,高度 = 300 像素。但是第二张图片应该出现在位置 200,0 .. 当 imagewidth 小于 200px (200px 是 maxwidth)

这是我尝试过的(php):

exec($IMAGEMAGICK_PATH."composite picA.jpg -geometry +200+0 picB.jpg picAB.jpg");

我也在“复合”之后尝试了“-size 400x300”,但没有任何反应。问题是图像 picA.jpg 移动了 200px 并合并到 picB.jpg 中,但 picAB.jpg 的宽度与 picB.jpg 相同。

我也不确定“-geometry”是否是正确的命令。

4

4 回答 4

14

-geometry如果两个文件大小相同,则无需使用。尝试

exec($IMAGEMAGICK_PATH."convert picA.jpg picB.jpg +append picAB.jpg");

-append如果要合并列中的图片,请使用。

如果您的图片大小不同请添加-background none-background black或或其他任何内容。在这种情况下,您可能还想添加or或一些类似的东西来控制两个图像的合并方式。然后需要出现在命令行上的之前:-background white-gravity center-gravity south-gravity+-append

exec($IMAGEMAGICK_PATH."convert big.jpg small.jpg -gravity east -append 2x.jpg");
于 2012-08-22T15:23:40.050 回答
3

这是我在 Kinoulink(一家法国初创公司)使用的 PHP 代码:

$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);
于 2013-07-10T17:41:09.167 回答
3

也许您会发现该montage方法更易于理解(这可能是您尝试使用它时想到的方法composite-但该方法用于重叠图像,而不是用于并排蒙太奇...)

montage                 \
  -background '#FFF9E3' \
  -geometry 200\!x\>    \
  -gravity west         \
   right+narrow.jpg     \
   left+wider.jpg       \
   result.jpg
于 2012-08-22T17:29:23.077 回答
3

由于扩展要求,这是一个执行图像附加的命令行,其中右图应从左边缘偏移 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 ... :-)

于 2012-08-22T16:18:07.993 回答