2013-03-06 45 views
14

GDと組み合わせてPHPで次のことを行いたいと思います。 ImageMagickはオプションではありませんが、残念ながら、これはよくある問題のようです。にはがあります。私はそれを見つけることができません。PHP/GD - 透明な背景

透明な背景のPNGを作成したいと思います。次に、その上に矩形を描き、イメージをコピーしてテキストを追加したいと思います。これは、黒かもしれませんコピーした画像の一部を除いて、正常に動作し、および/またはテキストが黒であるかもしれない

$image = ImageCreateTrueColor (800, 600); 
imagecolortransparent ($image, 0); //0 is pure black, the default fill color 
imagerectangle (...); 
//code to copy an image 
imagettftext ($image, ...); 
imagepng ($image); 

次のようにこれを行う1つの方法です。これもまた透明になります。これは何かではないが必要です。

imagefill ($image, 0,0, 0x7FFF0000); 
imagetransparent ($image, 0x7FFF0000); 

上記のコードは、私がオンラインで見つけたもので、赤で塗りつぶして赤を透明にします。この場合も、画像内のすべての赤色が透明になります。私は起こりそうにない色を選ぶことができましたが、これを保証することはできません。

紛失しているものがありますか?これは修正できますか? あなたの返信ありがとう!

答えて

26

imagecolortransparentは、単色の透明度が厄介であるため、画像をマージしている場合はおそらくあなたが望むものではありません。

代わりに、そのように透明の塗りつぶしマスクでそれを試してみてください。

<?php 
$image = imagecreatetruecolor(100, 100); 

// Transparent Background 
imagealphablending($image, false); 
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127); 
imagefill($image, 0, 0, $transparency); 
imagesavealpha($image, true); 

// Drawing over 
$black = imagecolorallocate($image, 0, 0, 0); 
imagefilledrectangle($image, 25, 25, 75, 75, $black); 

header('Content-Type: image/png'); 
imagepng($image); 
+0

imagealphablendingのデフォルト値をtrueに真のカラー画像に、これはまた:) 異なる何もしませんので、imagecreatetruecolorはなぜある黒画像を作成し、コードの最初の部分はimagecolortransparent(0)を使用します。 – Spinal

+0

その場合、私はあなたの問題を見ることができません。私は中央に黒い四角形を描くことによって上記をテストしました。そして、周囲の透明度でうまく動作しています。 –

+0

本当ですか?私は次のコードを試してみると、それを取り巻く黒色の青い四角形が表示されるので、何かが間違っている可能性があります。 $ image = imagecreatetruecolor(800,600); imagealphablending($ image、true); imagefilledrectangle($画像、50,50,750,550、imagecolorallocate($ image、0,0,128)); header( 'コンテンツタイプ:image/PNG'); imagepng($ image); – Spinal