2017-02-23 78 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'); 
?>