2016-03-21 49 views
1

我有兩個圖形文件。如何合併兩個圖形文件? (PHP,Imagick)

第一幅圖片 - JPG格式

第二個文件的背景圖像 - 在用白色填充中心的身影PNG文件,用路徑上的黑色邊框。透明PNG文件的主要背景。

問題: 如何合併具有透明度的兩個文件(請參見圖像示例)?第一個文件的背景應放在第二個文件中的圖形內。

方案:

example images

圖片:

PNG文件 - profiles.in.ua/tmp/sample2.jpg

JPG文件 - profiles.in.ua/tmp/sample1.png

PHP代碼:

$mask = new Imagick(realpath('mask.png')); 
$pattern = new Imagick(realpath('pattern.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 
$pattern->compositeImage($mask, Imagick::COMPOSITE_ATOP, 0, 0); 
header("Content-Type: image/png"); 
echo $pattern->getImageBlob(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

您管理員spaces.ru?你可以使用代碼snipet的標籤代碼? – Naumov

回答

2

假設掩模圖像總是由專門的白色像素(其應與圖案被覆蓋),黑色像素(這應該覆蓋圖案),和透明的像素(其應保持透明),您可以通過將圖案合成到蒙版中的不透明像素來獲得此效果,然後使蒙版變暗。

您提供的PNG文件沒有指定的透明背景;相反,它是白色和灰色的孵化。我必須先編輯它才能在此代碼工作之前添加透明背景。

$mask = new Imagick(realpath('sample1.png')); 
$pattern = new Imagick(realpath('sample2.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 

$image = clone($mask); 
$image->compositeImage($pattern, Imagick::COMPOSITE_IN, 0, 0); 
$image->compositeImage($mask, Imagick::COMPOSITE_DARKEN, 0, 0); 

header("Content-Type: image/png"); 
echo $image; 

$image->destroy(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

工作!非常感謝!你真的幫了! :) – Nikolay

0

您需要修復代碼的末尾。一切都很好,直到最後。

$base->writeImage('output.png'); 
header("Content-Type: image/png"); 
echo $base; 

更新我:)

+0

工作!非常感謝!你真的幫了! :) – Nikolay

+0

請加個投票! –