2017-02-23 117 views
1

我使用ImageMagick 7以及PHP 5.6.30和PECL Imagick 3.4.3。使用PHP合併透明PNG到JPEG Imagick

使用下面的代碼,我試圖覆蓋JPEG圖像上的50%透明PNG。結果是PNG圖像重疊但沒有透明度。

任何想法?

<?php 
    $im = new Imagick('base.jpg'); 
    $wm = new Imagick('watermark.png'); 
    $wm->setImageAlpha(0.5); 
    $im->compositeImage($wm, Imagick::COMPOSITE_COPYOPACITY, 0, 0); 
    $im->writeImage('final.jpg'); 
?> 
+1

我相信你想不變的是'COMPOSITE_OVER'。 'COMPOSITE_COPYOPACITY'應該只複製圖像中的不透明通道,而不是保留不透明度的整個圖像。 –

+0

使用COMPOSITE_OVER可使圖像透明,但不透明。有任何想法嗎? – Reado

回答

0

這似乎爲我工作:

<?php 
    $im = new Imagick('base.jpg'); 
    $wm = new Imagick(); 
    $wm->setBackgroundColor(new ImagickPixel('transparent')); 
    $wm->readImage('watermark.png'); 
    $wm->setImageFormat('png32'); 
    $wm->setImageAlpha(0.5); 
    $im->compositeImage($wm, Imagick::COMPOSITE_OVER, 0, 0); 
    $im->writeImage('final.jpg'); 
?>