2012-04-27 26 views
0

我試圖將圖像的背景顏色從白色更改爲透明,然後將其作爲遮罩放在另一圖像上。 (不能是透明不已,因爲另一部分是用來作爲一個面具戴在另一個圖像)...層樂趣:)PHP將圖像顏色更改爲透明,然後用作蒙板

全碼:

<? 
include '../includes/db.php'; 
include '../includes/checks.php'; 

$type = $_GET['t']; //shirt | shorts 
$style = $_GET['s']; 
$z = $_GET['z']; // home | away 
$a = $_GET['a']; 
$b = $_GET['b']; 

$aR = hexdec($a['0'].$a['1']); 
$aG = hexdec($a['2'].$a['3']); 
$aB = hexdec($a['4'].$a['5']); 
$bR = hexdec($b['0'].$b['1']); 
$bG = hexdec($b['2'].$b['3']); 
$bB = hexdec($b['4'].$b['5']); 

// main top 
$imgname = '../images/kits/test/'. $uTime .'.png'; 
$im = imagecreatetruecolor(100, 100); 
$red = imagecolorallocate($im, $aR, $aG, $aB); 
imagefill($im, 0, 0, $red); 

$mask = imagecreatefrompng('../images/kits/test/6-space.png'); 
imagecopyresampled($im, $mask, 0, 0, 0, 0, imagesx($im), imagesy($im), imagesx($mask), imagesy($mask)); 
imagedestroy($mask); 

$mask = imagecreatefrompng('../images/kits/test/4-shadows.png'); 
imagecopyresampled($im, $mask, 0, 0, 0, 0, imagesx($im), imagesy($im), imagesx($mask), imagesy($mask)); 
imagedestroy($mask); 

$mask = imagecreatefrompng('../images/kits/test/1-tag.png'); 
imagecopyresampled($im, $mask, 0, 0, 0, 0, imagesx($im), imagesy($im), imagesx($mask), imagesy($mask)); 
imagedestroy($mask); 

// design 
$im2 = imagecreatetruecolor(100, 100); 
$red = imagecolorallocate($im2, $bR, $bG, $bB); 
imagefill($im2, 0, 0, $red); 

$mask = imagecreatefrompng('../images/kits/test/5-logo.png'); 
imagecopyresampled($im2, $mask, 0, 0, 0, 0, imagesx($im2), imagesy($im2), imagesx($mask), imagesy($mask)); 
imagedestroy($mask); 
imagecolortransparent($im2, imagecolorallocatealpha($im2, 0, 0, 0, 127)); 
imagealphablending($im2, false); 
imagesavealpha($im2, true); 
$white = imagecolorallocate($im2,255,255,255); 
imagecolortransparent($im2, $white); 

// merge and result 
imagecopyresampled($im, $im2, 0, 0, 0, 0, imagesx($im), imagesy($im), imagesx($im2), imagesy($im2)); 
imagepng($im, $imgname); 
imagedestroy($im2); 
imagedestroy($im); 
echo '<img src="', $imgname ,'">'; 
?> 
+0

作爲一個方面說明的%時,我輸出的圖像,它顯示白色255,255,255和254,254,254。此外,如果我使用imagecolorset,它似乎沒有做任何事情:/ – DugoutSoccer 2012-04-27 22:12:54

+0

出於興趣,你爲什麼用Imagemagick標記它時,它正在使用GD? – Bonzo 2012-04-28 14:29:20

+0

在Imagemagick中有一些可以完成的功能...我對操縱圖像很新穎,所以建議的任何內容都可能有所幫助......似乎沒有人知道答案,那麼也許太困難了? :P – DugoutSoccer 2012-04-28 18:14:09

回答

1

兩個方法與ImageMagick的(第二個例子是來自http://www.imagemagick.org/Usage/masking/

更改全白圖像中的透明

convert input.jpg -matte -fuzz 1% -transparent rgb(255,255,255) mask.png 

更改全部被連接到一個圖像中的白色像素在左上角。

convert input.jpg -alpha set -channel RGBA -fuzz 1% -fill none -floodfill +0+0 white mask.png 

在php中使用這樣的:

exec("convert input.jpg -matte -fuzz 1% -transparent rgb\(255,255,255\) mask.png"); 

上面的命令正在改變白色RGB(255,255,255)actualy + - 1的RGB值,以透明

+0

好吧,讓我們試試沒有Imagemagick,對不起!不知道如何使用它 – DugoutSoccer 2012-04-29 14:28:54

+0

我認爲Imagemagick使用GD要簡單得多;你可以看看我的網站的例子與PHP。 – Bonzo 2012-04-29 14:46:28