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();

在此处输入图像描述

如您所见,捷豹标志全黑。


“第二次尝试”

$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();

在此处输入图像描述

这个捷豹标志看起来应该是这样,但现在背景全乱了。


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

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

非常感谢你!

4

2 回答 2

11

我是个大白痴!原来我忘记将图像从 CMYK 转换为 RGB。对于以后可能遇到这种情况的人,请向我的无能学习!

于 2013-03-28T15:32:48.583 回答
2

我试图在另一个 png 的顶部覆盖一个具有透明度的 png。我使用了 PHP 文档中的这一行。

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

但我遇到了同样的问题。覆盖层仅以黑色显示。将其更改为此似乎可以修复颜色。

$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 0, 0);
于 2015-10-22T14:54:52.200 回答