我一直在使用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);

谢谢!!

有帮助吗?

解决方案

我遇到了同样的问题,发现魔法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++);
}

其他提示

我知道这是一个古老的问题,但是我找到了使用Imagick的MontageImage功能进行此操作的另一种方法。创建Imagick对象后,您必须将背景声明为透明:

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

设置后,您可以通过MontageImage运行对象,该对象将创建具有透明背景的MontageImage:

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

然后,您可以将新的蒙太奇图像添加到复合图像中,请确保使用预定义的Imagick复合常数Composite_Atop或您所需的常数(S):

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top