PHPでは、 ImageColorallocatealpha()関数を使用して、Alpha(透明性)情報を使用して画像を割り当てます。ただし、この機能に注意する必要があります。非トルコラー画像( ImageCreate()によって作成されたパレット画像)で使用しようとすると、予期しない動作やエラーに遭遇する可能性があります。
それでは、非トルコラー画像で間接的にImageColorallocatealpha()の機能を使用する方法は?この記事では、その原則を説明し、実用的なコードの例を提供します。
パレットベースの画像
最大256色を使用して、各色はパレットに保存されます。 ImageCreate()によって作成されました。単純なグラフィックスに適していますが、真の透明チャネルをサポートしていません。
Truecolor画像<br> 各ピクセルは、RGB(赤、緑、青)およびアルファ(透明性)値を個別に保存します。 ImageCreatetrueColor()によって作成されました。透明性が必要な複雑なグラフィックとシナリオに適しています。
ImageColorallocatealpha()にはアルファチャネルが含まれるため、有効になるためにTruecolor画像が必要です。
最初にImageCreate()を使用してパレット画像を作成した場合、 ImageColorallocatealpha()を使用する前に、Truecolor画像に変換できます。
<?php
// パレット画像を作成します
$paletteImage = imagecreate(200, 200);
$white = imagecolorallocate($paletteImage, 255, 255, 255);
$black = imagecolorallocate($paletteImage, 0, 0, 0);
// パレット画像をに変換します truecolor 画像
$truecolorImage = imagecreatetruecolor(imagesx($paletteImage), imagesy($paletteImage));
imagecopy($truecolorImage, $paletteImage, 0, 0, 0, 0, imagesx($paletteImage), imagesy($paletteImage));
// 透明性のある色を割り当てます
$transparentRed = imagecolorallocatealpha($truecolorImage, 255, 0, 0, 64); // 64 半透明を示します
// この色を使用して、塗りつぶしの長方形を描きます
imagefilledrectangle($truecolorImage, 50, 50, 150, 150, $transparentRed);
// ASを保存します PNG(透明性をサポートします)
header('Content-Type: image/png');
imagepng($truecolorImage);
// メモリをきれいにします
imagedestroy($paletteImage);
imagedestroy($truecolorImage);
?>
ImageCreateTrueColor()は、デフォルトで完全に黒い背景を持つ画像を作成します。元のパレット画像の背景を保持したい場合は、 ImageCopy()を使用する必要があります。
Alphaチャネルを保存するために、出力はPNG形式です(JPEGは透明性をサポートしません)。
透明度の値は、 0(完全に不透明)から127(完全に透明)の範囲です。
<?php
$image = imagecreatefrompng('https://m66.net/images/sample.png');
$semiTransparentBlue = imagecolorallocatealpha($image, 0, 0, 255, 80);
imagefilledellipse($image, 100, 100, 80, 80, $semiTransparentBlue);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>