0

透明な部分がある画像があります。(png image)さて、画像コピーをしながら、その透明な領域を埋めることができますか?

Imagemagickはこれを簡単に行うことができます。それはphpgdで可能ですか?

4

3 に答える 3

2

経由の階層化アプローチ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つの状態です。

           
于 2012-07-14T10:44:31.867 に答える
0

透明性があるところに「埋める」ものは何もありません。png(またはgif)の透明度は、色がないことではなく、透明として表示されるように特別にマークされた単一の色です。したがって、そのマーカーを削除する必要があります。

phpgds関数' imagecolortransparent 'を見てください:

于 2012-07-14T10:30:30.493 に答える
0

いいえ、できません。代わりに、色付きの長方形からコピーを作成してみてください。このコードは私のために働いた:

$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);
于 2017-04-25T02:39:13.167 に答える