PHPのGDライブラリを使用して画像を処理する場合、多くの開発者はそのような混乱に遭遇します。
「 ImageColorallocatealpha()で透明な色をはっきりと設定しましたが、なぜ最後のPNGファイルが完全に不透明に保存されているのですか?」
この問題を注意深く分析し、正しい解決策を見つけましょう。
まず、次のようなコードを書いたとします。
<?php
$width = 200;
$height = 100;
// 真の色の画像を作成します
$image = imagecreatetruecolor($width, $height);
// 透明性のある色を割り当てます
// パラメーター順序:R, G, B, Alpha(0 完全に不透明,127 完全に透明)
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);
// この色で背景を埋めます
imagefill($image, 0, 0, $transparentColor);
// ASを保存します PNG
imagepng($image, 'output.png');
// リソースを破壊します
imagedestroy($image);
?>
赤い背景に完全に透明なPNG画像を生成することを期待していますが、ファイルを開いた後、背景は赤い不透明であることがわかります。
なぜ?
GDライブラリのImageColorallocatealpha()には、Alpha情報を含む色が割り当てられているだけですが、PNGファイルを保存すると、GDがAlphaチャネルを自動的に保持することを意味しません。
透明性情報をPNGに適切に保存するには、2つのことを明示的に有効にする必要があります。
アルファチャネルをオンにして<br>を保存します ImagesAvealpha($ Image、True)を使用して、PNGを保存するときにAlphaチャネルを含めるようにGDライブラリに指示します。
アルファミックスをオフにします(オプションですが、推奨)
画像ピクセルを操作するときに色を誤って混合しないようにするには、 Imagealphableending($ image、false)を使用してください。
<?php
$width = 200;
$height = 100;
// 真の色の画像を作成します
$image = imagecreatetruecolor($width, $height);
// 閉鎖 alpha ミックス(透明な背景を適切に保存します)
imagealphablending($image, false);
// 保存を有効にします alpha チャネル情報
imagesavealpha($image, true);
// 分配一个完全に透明的红色
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);
// この色で背景を埋めます
imagefill($image, 0, 0, $transparentColor);
// ASを保存します PNG
imagepng($image, 'output.png');
// または、ウェブページに保存して直接出力します
// header('Content-Type: image/png');
// imagepng($image);
// リソースを破壊します
imagedestroy($image);
?>
このコードは、透明な赤い背景を持つPNG画像を生成します。
PHPでImageColorallocatealpha()で透明な色を設定しますが、保存されたPNGは不透明です。通常、忘れたためです。
? Imagealphableending($ image、false)を使用する
?画像avealpha($ image、true)を使用する
これらの2つのステップは、透明なPNG保存の鍵です。