Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有徽标的ImageMagick蒙太奇_Php_Imagemagick - Fatal编程技术网

Php 带有徽标的ImageMagick蒙太奇

Php 带有徽标的ImageMagick蒙太奇,php,imagemagick,Php,Imagemagick,我试图创建一个开放的图形图像蒙太奇使用1至3个图像,与一个标志覆盖在最后的蒙太奇。我用下面的代码处理这个问题-但是,我必须生成1到3个图像蒙太奇,然后添加徽标并生成一个新图像,然后删除第一个图像。我相信有一种更有效的方法可以做到这一点——用一个exec来完成这一切,而不必输出两个图像然后删除一个。谢谢你的建议 if ($array_count == 1) { $w = 898; $h = 474; $t = '1x1'; } else

我试图创建一个开放的图形图像蒙太奇使用1至3个图像,与一个标志覆盖在最后的蒙太奇。我用下面的代码处理这个问题-但是,我必须生成1到3个图像蒙太奇,然后添加徽标并生成一个新图像,然后删除第一个图像。我相信有一种更有效的方法可以做到这一点——用一个
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我已经更新了答案-希望您现在可以看到如何操作。太好了!很高兴你成功了-祝你的项目好运!请记住,问题是免费的,所以如果您有任何问题,请稍后再来。