使用Imagick在JPG上叠加PNG

时间:2013-03-08 14:42:59

标签: php imagemagick imagick

我最近几个小时试图在JPG背景上获得带有透明背景的PNG徽标。我已经尝试了几种方法,并且还有几种全局变量,但我似乎无法得到我想要的结果。

“第一次尝试”:

$overlay = new Imagick('overlay.png');
$image = new Imagick('background.jpg');

$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10);
$image->writeImage('background.jpg'); //replace original background

$overlay->destroy();
$image->destroy();

enter image description here

如您所见,Jaguar徽标全黑。


“第二次尝试”

$overlay = new Imagick('overlay.png');
$image = new Imagick('background.jpg');

$image->setImageColorspace($overlay->getImageColorspace() ); 
$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10);
$image->writeImage('background.jpg'); //replace original background

$overlay->destroy();
$image->destroy();

enter image description here

这款Jaguar标志看起来应该是这样,但背景现在已经搞砸了。


我尝试使用Imagick::setImageMatte并尝试添加overlay to a white background(我认为我需要具有透明背景)并且仍然无法正确显示图像。我已经尝试了上述2个片段的许多其他变体,但它们似乎都使PNG完全或部分黑色。

我错过了什么或做错了什么?任何人都可以给我一个正确的方向吗? 请注意,这需要用PHP完成。

非常感谢!

2 个答案:

答案 0 :(得分:10)

我是个大白痴!结果我忘了将图像从CMYK转换为RGB。 对于将来可能会遇到这种情况的人,请从我的无能中学习!

答案 1 :(得分:2)

我试图在另一个png的顶部覆盖透明度的png。我使用the PHP docs中的这一行。

$src1->compositeImage($src2, Imagick::COMPOSITE_MATHEMATICS, 0, 0);

但是我遇到了同样的问题。叠加层仅以黑色显示。改变它似乎可以修复颜色。

$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 0, 0);