Php 带有徽标的ImageMagick蒙太奇
我试图创建一个开放的图形图像蒙太奇使用1至3个图像,与一个标志覆盖在最后的蒙太奇。我用下面的代码处理这个问题-但是,我必须生成1到3个图像蒙太奇,然后添加徽标并生成一个新图像,然后删除第一个图像。我相信有一种更有效的方法可以做到这一点——用一个Php 带有徽标的ImageMagick蒙太奇,php,imagemagick,Php,Imagemagick,我试图创建一个开放的图形图像蒙太奇使用1至3个图像,与一个标志覆盖在最后的蒙太奇。我用下面的代码处理这个问题-但是,我必须生成1到3个图像蒙太奇,然后添加徽标并生成一个新图像,然后删除第一个图像。我相信有一种更有效的方法可以做到这一点——用一个exec来完成这一切,而不必输出两个图像然后删除一个。谢谢你的建议 if ($array_count == 1) { $w = 898; $h = 474; $t = '1x1'; } else
exec
来完成这一切,而不必输出两个图像然后删除一个。谢谢你的建议
if ($array_count == 1) {
$w = 898;
$h = 474;
$t = '1x1';
} else if ($array_count == 2) {
$w = 449;
$h = 474;
$t = '2x2';
} else if ($array_count == 3) {
$w = 299;
$h = 474;
$t = '3x1';
}
$exe = " montage ";
foreach ($photo_array as $p) {
$exe .= " http://website.com/images/{$p} -thumbnail {$w}x{$h}^ -gravity center -extent {$w}x{$h} -geometry {$w}x{$h}+1+1 ";
}
$exe .= "-tile $t ";
$exe .= " poster1.jpg ";
exec("$exe");
exec(" convert poster1.jpg logo_overlay.png -gravity SouthEast -geometry +10+10 -composite poster2.jpg ");
@unlink("poster1.jpg");
$img_out = "poster2.jpg";
更新的答案 根据您提供的进一步信息,这可能有助于您了解如何做到这一点:
montage red.png lime.png blue.png cyan.png magenta.png yellow.png -geometry +0+0 -tile 3x2 miff:- | convert miff:- -gravity southeast logo.png -composite result.png
徽标为黑色,50x50,而其他瓷砖为100x100
原始答案
你可以用两种方法来做——请把这些作为示意图的答案,而不是详细到最后一个像素——但是你应该明白了
选项1
您不一定需要使用montage
来布局图像,您可以使用convert
命令的append
选项,这样-append
将一个图像放置在另一个图像的下方,+append
将一个图像放置在另一个图像的右侧。然后,由于您已经在使用convert
而不是montage
,您可以在顶部合成徽标。因此,您的命令将如下所示:
convert \( image1.png -resize ... -extent ... \) \
\( image2.png -resize ... -extent ... \) \
+append \
\( image3.png -resize ... -extent ... \) \
+append \
logo.png -gravity ... -composite result.png
选项2
您可以将命令/图像链接在一起,最理想的方法是在命令之间的管道中发送ImageMagick的MIFF
文件格式,这样可以保留所有图像细节、分辨率和透明度。因此,您可以:
foreach image do
convert image -resize ... -extent ... miff:-
done | montage -tile ... miff:- miff:- | convert miff:- logo.png -composite result.png
你好,马克。我尝试了第一个选项,但是我也需要它来处理多达6个图像。瓷砖3x3。为了简单起见,我在示例中只使用了3个图像。我应该包括所有的代码多达6个图像平铺。因此,第一个选项对我来说不适用于3张以上的图像,而我似乎无法使用
miff:-
计算出第二个选项。您能否更详细地介绍一下我如何实现选项2。非常感谢您的帮助。@Chris我已经更新了答案-希望您现在可以看到如何操作。太好了!很高兴你成功了-祝你的项目好运!请记住,问题是免费的,所以如果您有任何问题,请稍后再来。