ImageMagick蒙太奇与徽标

时间:2016-04-18 03:24:13

标签: php imagemagick

我正在尝试使用1到3张图片创建一个Open Graph Image蒙太奇,并在最终的蒙太奇上覆盖一个徽标。我使用以下代码 - 但是,我必须生成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";

1 个答案:

答案 0 :(得分:0)

更新了答案

根据您提供的进一步信息,这可能会帮助您了解如何操作:

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

enter image description here

徽标为黑色,50x50,而其他图块为100x100。

原始答案

你可以通过几种方式来实现 - 请将这些作为原理图答案,而不是详细到最后一个像素 - 但你应该明白这一点。

选项1

您绝对不需要使用montage来布置图片,您可以使用append命令来convert命令,-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 ,因此您可以将徽标组合在一起。所以,你的命令看起来像这样:

MIFF

选项2

您可以将命令/图像链接在一起,理想情况是将ImageMagick的foreach image do convert image -resize ... -extent ... miff:- done | montage -tile ... miff:- miff:- | convert miff:- logo.png -composite result.png 文件格式发送到命令之间的管道,因为这样可以保留所有图像细节,分辨率和透明度。所以你可以这样做:

dueAmount