想象一下PHP扩展 - 蒙太奇的帮助?

时间:2010-05-13 21:25:18

标签: php transparency imagick montage

我在使用Imagick PHP扩展程序生成图像时遇到了一些麻烦。一切正常,除了我的后续“蒙太奇”有白色背景,因此我无法将其覆盖在其他东西之上。如何生成透明背景的蒙太奇?

       $Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
      $Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);

谢谢!

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,并发现MagickWand C API(为imagick提供动力)不支持蒙太奇选项。

我最终像这样手动收集它:

// Add them to an array of Imagick objects, instead of using addImage().
$images = new Array();

// Make a transparent canvas.
$target = new Imagick();
$target->newImage($width, $height * count(images), 'none');

$i = 0;
foreach ($images as $image) {
    $target->compositeImage($image, imagick::COMPOSITE_COPY, 0, $height * $i++);
}

答案 1 :(得分:3)

我知道这是一个老问题,但我找到了另一种使用Imagick的montageImage函数的方法。创建Imagick对象后,必须将背景声明为透明,如下所示:

$Icons->setBackgroundColor( new ImagickPixel('transparent') );

设置完成后,您可以通过montageImage运行该对象,这将创建一个透明背景的蒙太奇图像:

$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");

然后您可以将新的蒙太奇图像添加到合成图像中,确保使用预定义的Imagick复合常量COMPOSITE_ATOP或您想要的常量(如下所示):

$Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);

刚刚遇到这个问题并决定发布另一个解决方案,以防其他人想要另一种方法来做到这一点,而无需手动循环。