2013-03-08 62 views
6

我有几个小时试图在JPG背景上获得带有透明背景的PNG徽标。我已经尝试了几种方法并使用了几种全局变量,但我似乎无法获得我想要的结果。使用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

正如你可以看到,捷豹标志是全黑的。


“第二次尝试”

$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

这一个捷豹标志看起来像它应该,但背景是现在都搞砸了。


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

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

非常感谢!

回答

10

我是一个巨大的白痴!原来我忘了将图像从CMYK转换为RGB。 对于任何未来可能遇到此问题的人,请从我的无能中学习!

2

我试图在另一个PNG的顶部覆盖一个PNG的透明度。我用这条线从the PHP docs

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

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

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