使用Imagick将PNG覆盖在JPG上

8

我花了几个小时尝试在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();

这里输入图片描述

正如你所看到的,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();

这里输入图片描述

这个图片里Jaguar的标志看起来很正常,但是它的背景现在乱七八糟的。


我已经尝试了Imagick::setImageMatte并尝试添加了一个覆盖的白色背景(虽然我以为需要一个透明背景),但仍无法正确显示图像。 我尝试了以上两个片段的许多其他变化,但它们似乎都会使PNG完全或部分变成黑色。

我错过了什么或做错了什么? 有谁能给我指点一下方向?请注意,这需要在PHP中完成。

非常感谢!

2个回答

11

我是个大笨蛋!原来我忘记把图像从CMYK转换为RGB。 对于未来可能遇到这种情况的人,请从我的无能中吸取教训!


2
如何将CMYK转换为RGB?你能贴出代码吗? - Alauddin Ahmed

2

我试图在另一个png的顶部覆盖一个带有透明度的png。我使用了来自PHP文档的这行代码。

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

但我遇到了同样的问题。叠加层只出现黑色。将其更改为以下内容似乎可以解决颜色问题。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接