Imagick PHP扩展——蒙太奇帮助?

Imagick PHP扩展——蒙太奇帮助?,php,transparency,imagick,montage,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($Mon

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

谢谢

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

我最终手动剪辑成这样:

// 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对象后,必须将背景声明为透明,如下所示:

// 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++);
}
$Icons->setBackgroundColor(新的ImagickPixel('transparent')

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

$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
然后,您可以将新的蒙太奇图像添加到合成图像中,确保使用预定义的Imagick composite constant composite\u或所需的常量,如下所示:

// 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++);
}
$Canvas->compositeImage($Montage,imagick::COMPOSITE_top,5,5)


刚刚遇到这个问题,决定发布另一个解决方案,以防其他人想用另一种方法来完成此操作而不需要手动循环。

很遗憾,你必须手动完成此操作,但至少你的建议让我省去了严重的头痛。我需要在2x2布局中蒙太奇图像,但只需稍加调整,您的代码片段就非常适合。请参阅下面的答案。它使用了蒙太奇图像和作品。