PHP画像処理中、 ImageColorallocatealpha()関数は、画像に透明性のある色を割り当てるために使用されます。ただし、多くの開発者は、非PNG形式で画像で関数を使用する場合、適切に機能しないように見えるという問題に遭遇する可能性があります。この記事では、なぜこれが起こるのかを掘り下げ、その背後にある理由を説明しようとします。
ImageColorallocatealpha()関数は、色を割り当て、画像に透明性を設定するために使用されます。その基本的な構文は次のとおりです。
int imagecolorallocatealpha(resource $image, int $red, int $green, int $blue, int $alpha);
$画像:ターゲット画像リソース。
$ red 、 $ green 、 $ blue :RGB COLONENTS of Color(0〜255)。
$ alpha :透明性(0は完全に不透明で、127は完全に透明です)。
画像形式が透明性(PNGなど)をサポートする場合、この関数を使用して透明度を設定して、画像内のピクセルが透明または半透明になるようにします。
問題の鍵は、画像形式のサポートにあります。 PNGは、アルファチャネルを使用して透明情報を保存する透明な形式です。ただし、JPEGやGIFなどの他の一般的な画像形式は、アルファチャネルや透明性の完全な機能をサポートしていません。
JPEGは、透明性に関係なく設計された圧縮形式です。したがって、JPEG画像では、 ImageColorallocatealpha()の透明性パラメーターは無視されます。この関数を介して透明性を設定したとしても、画像には期待される効果がありません。透明なピクセルは不透明な色に処理されます。
GIF形式は透明な色(つまり、単一の透明なピクセル)をサポートしていますが、PNGのようなアルファチャネルはサポートしていません。 GIF画像は、ピクセルあたりの完全な透明性または総不透明度のみをサポートしており、部分的に透明性を発揮できません。したがって、 ImageColorallocatealpha()のアルファパラメーターもGIF画像で使用されています。
さらに、一部の画像タイプ(JPEGなど)は、内部処理の制限により透明性を適切にサポートしない場合があります。 ImageColorallocatealpha()を介してコードで透明性が設定されている場合でも、これらの画像タイプは透明なピクセルを正しく処理できない場合があります。
ImageColorallocatealpha()が適切に機能するためには、Alphaチャネル、特にPNG形式をサポートする画像形式を使用することをお勧めします。これが例です:
<?php
// aを作成します 100x100 の PNG 画像
$image = imagecreatetruecolor(100, 100);
// 開ける alpha チャネルサポート
imagesavealpha($image, true);
// 分配带有透明度の颜色
$transparent_color = imagecolorallocatealpha($image, 255, 0, 0, 50);
// 填充画像背景为该透明颜色
imagefill($image, 0, 0, $transparent_color);
// 出力はです PNG 形式
header('Content-Type: image/png');
imagepng($image);
// リソースをクリーンアップします
imagedestroy($image);
?>
ImageColorallocatealpha()関数は、主に画像形式自体の制限のために、非PNG形式で正常に使用することはできません。 JPEGは透明性をサポートしていませんが、GIFは単一の透明ピクセルのみをサポートし、PNGなどの透明チャネルをサポートできません。透明性効果を使用する必要がある場合は、透明性(PNGなど)をサポートする画像形式を必ず選択してください。