透明な部分がある画像があります。(png image)さて、画像コピーをしながら、その透明な領域を埋めることができますか?
Imagemagickはこれを簡単に行うことができます。それはphpgdで可能ですか?
経由の階層化アプローチimagecopymerge()
は1つのルートです。コンセプトは、ソース画像を新しい画像にマージすることです。背景画像は事前に設定されており、マージするとソース画像の透明度が透けて見えます。
//create main image - transparent, with opaque red square in middle
$img = imagecreate(60, 60);
$white = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $white); //make background transparent
$red = imagecolorallocate($img, 255, 0, 0);
imagefilledrectangle($img, imagesx($img) / 4, imagesy($img) / 4, imagesx($img) - (imagesx($img) / 4), imagesy($img) - (imagesy($img) / 4), $red);
//create new image, with pre-filled background, then merge first image across
$img2 = imagecreate(60, 60);
$blue = imagecolorallocate($img2, 0, 0, 255);
imagecopymerge($img2, $img, 0, 0, 0, 0, imagesx($img), imagesy($img), 100);
//output
imagepng($img2);
したがって、最初の画像は、中央に赤い四角が付いた透明な画像(白)を作成します。2番目の画像は単純に青い塗りつぶしです。2つをマージすると、最初の画像の透明な部分から青が透けて見えるので、赤い正方形が青い塗りつぶしの上に配置されます。事実上、透明部分を塗りつぶしました。
これが順番に3つの状態です。
透明性があるところに「埋める」ものは何もありません。png(またはgif)の透明度は、色がないことではなく、透明として表示されるように特別にマークされた単一の色です。したがって、そのマーカーを削除する必要があります。
phpgds関数' imagecolortransparent 'を見てください:
いいえ、できません。代わりに、色付きの長方形からコピーを作成してみてください。このコードは私のために働いた:
$input = imagecreatefrompng($file_input);
list($width, $height) = getimagesize($file_input);
$output = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($output, 255, 255, 255);
imagefilledrectangle($output, 0, 0, $width, $height, $white);
imagecopy($output, $input, 0, 0, 0, 0, $width, $height);
imagepng($output, $file_output);