17

GDと組み合わせてPHPで次のことをしたいです。残念ながら、ImageMagick はオプションではありませんが、これは非常に一般的な問題のようで、解決策が必要なようです

背景が透明なPNGを作りたいです。次に、その上に長方形を描画し、その上に画像をコピーして、テキストを追加します。これを行う 1 つの方法は次のとおりです。

$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);

これは正常に機能しますが、コピーされた画像の一部が黒くなったり、テキストが黒くなったりする場合があります。これも透明になりますが、これは望ましくありません。

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

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

足りないものはありますか?これは修正できますか?返信ありがとうございます。

4

1 に答える 1

34

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);
于 2013-03-06T12:04:12.623 に答える