2013-03-08 58 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);