2015-11-20 2 views
0

Я хочу установить прозрачность на картинке, а ниже не работает, когда версия imagick - 6.8.9.imagick image водяной знак прозрачный

<?php 
// Open the original image 
$image = new Imagick(); 
$image->readImage(3.jpg); 

// Open the watermark 
$watermark = new Imagick(); 
$watermark->readImage(2.png); 
$watermark->setImageOpacity(0.4); 

// Overlay the watermark on the original image 
$image->compositeImage($watermark, imagick::COMPOSITE_OVER, 20, 20); 

// send the result to the browser 
header("Content-Type: image/" . $image->getImageFormat()); 
echo $image; 

Есть ли другой способ решить проблему прозрачного?

ответ

0

Я нашел решение.

$watermark->setImageOpacity(0.4); 
//It wouldn't work well because it would have a uniform effect On the picture. 

$watermark->evaluateImage(Imagick::EVALUATE_MULTIPLY, 0.4, Imagick::CHANNEL_ALPHA); 
//It works well and have a satisfactory result. 

Я понял это с помощью Go. Ниже код работает хорошо и успешно работает.

mw = imagick.NewMagickWand() 
mw.ReadImageBlob(src_image) // src_image is the source image 

water_mw = imagick.NewMagickWand() 
water_mw.ReadImageBlob(water_image) // water_image is the watermark image 

// Set the transparent with 0.4 
water_mw.EvaluateImageChannel(imagick.CHANNEL_ALPHA, imagick.EVAL_OP_MULTIPLY, 0.4) 
//if water image has no alpha channel, replace with water_mw.EvaluateImage(imagick.EVAL_OP_MULTIPLY, 0.4) 

// Composite the water image on source image, x, y are the coordinate u would composite 
mw.CompositeImage(water_mw, imagick.COMPOSITE_OP_DISSOLVE, 20, 20) 
dst_image = mw.GetImageBlob() 
Смежные вопросы