web-dev-qa-db-ja.com

PHP / Gd-透明な背景

PHP Gdと組み合わせて次のことをしたいです。残念ながら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);

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

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

14
Spinal

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);
28
Rudi Visser