2012-04-27 3 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

にRGB値の1%私は画像を出力し、白は255,255,255と254,254,254と表示されます。また、私がimagecolorsetを使用すると、何もしないように見えます:/ – DugoutSoccer

+0

なぜGDを使用しているときにImagemagickでこれをタグ付けしましたか? – Bonzo

+0

Imagemagickで行うことができるものがあります...私は画像を操作するのがとても新しいので、何か助けてもらえますように...誰も答えが分からないようです。 :P – DugoutSoccer

答えて

1

ImageMagickを持つメソッドのカップル(第二の例では、透明

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

変更全てに

変更)http://www.imagemagick.org/Usage/masking/からに接続されている画像における白画像内のすべての白来左上隅のピクセル。このようなPHPの使用において

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

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

上記コマンド+ actualy白色RGB(255,255,255)に変化している - と、サイドノートとして透明

+0

OK、Imagemagickなしで試してみてください、申し訳ありません!それを使う方法はわかりません – DugoutSoccer

+0

私はImagemagickがそのGDを使う方がずっと簡単だと思います。私のウェブサイトでPHPの例をチェックすることができます。 – Bonzo

関連する問題