2010-05-13 110 views
4

我一直在用Imagick PHP扩展生成图像时遇到了一些麻烦。一切工作正常,除了我以下的“蒙太奇”有一个白色的背景,因此我不能覆盖它在别的东西之上。我如何生成透明背景的蒙太奇?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); 

谢谢!!

回答

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++); 
} 
+0

太糟糕了,你必须手工做到这一点,但至少你的建议为我节省了一个严重的头痛。我需要2×2布局中的蒙太奇图像,但只需少量调整,您的代码片段就非常合适。 – Patonza 2010-10-19 21:29:54

+0

请参阅下面的答案。它使用蒙太奇图像和工作。 – javsmo 2014-07-16 22:21:47

3

我知道这是一个老问题,但我发现另一种方式来做到这一点使用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);

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

+0

这是正确答案! – javsmo 2014-07-16 22:21:08