画像処理にPHPを使用する場合、GDライブラリは多くの強力な機能を提供します。ここでは、 ImageColorallocatealpha()は、透明性を備えた色を割り当てる機能です。それを使用すると、多くの開発者は、透明な色が割り当てられていても、保存されたPNGまたはGIFファイルがまだ完全に不透明であることを発見します。なぜこれがなぜですか?問題の鍵は、簡単に見落とされる別の関数にあります: ImagesAvealpha() 。
ImageColorallocatealpha()の基本的な使用法は次のとおりです。
$image = imagecreatetruecolor(200, 200);
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127); // 赤,完全に透明
そのパラメーターには、赤、緑、青、透明性が含まれます(0〜127、0は完全に不透明であり、127は完全に透明なことを意味します)。この関数を使用して、半透明の長方形、テキストなど、画像に透明な要素を描画できます。
ただし、この関数は色のみを割り当てるのにのみ責任があり、GDライブラリに「画像を出力するときにアルファチャネルを保持してください」を自動的に指示しません。
これがImagesAvealpha()が行うことです。
imagesavealpha($image, true);
この関数を呼び出すと、GDライブラリはPNG(または透明性をサポートする他の形式)を出力するときにアルファチャネルのデータを保持します。有効になっていない場合、GDはデフォルトでアルファ(通常は黒または白)のないバックグラウンドで透明な領域を埋め、割り当てられた透明な色を失敗させ、保存された画像は完全に不透明に見えます。
言い換えると:
? ImageColorallocatealpha() →色の透明な部分を定義します
??ただし、ファイルに透明な情報を自動的に保持しません→ [ImageAvealpha()を手動で呼び出す必要があります
簡単な例を見てみましょう。
<?php
// キャンバスを作成します
$image = imagecreatetruecolor(200, 200);
// 開ける alpha チャネル保存
imagesavealpha($image, true);
// 创建一个完全に透明的背景色
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
// 背景を埋めます
imagefill($image, 0, 0, $transparent);
// 画一个半透明的赤矩形
$red = imagecolorallocatealpha($image, 255, 0, 0, 63);
imagefilledrectangle($image, 50, 50, 150, 150, $red);
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// 無料のメモリ
imagedestroy($image);
?>
ImagesAvealpha($ image、true)ラインを削除すると、保存されたPNGファイルの透明な領域が直接失われ、黒い背景を持つ赤い長方形のように見えます。
画像をブラウザに出力する代わりにファイルとして保存する場合は、これを行うことができます。