現在の位置: ホーム> 最新記事一覧> ImageColorallocatealpha関数を使用すると、Alpha値を正しく設定すると、画像の透明性の問題が発生するのはなぜですか?

ImageColorallocatealpha関数を使用すると、Alpha値を正しく設定すると、画像の透明性の問題が発生するのはなぜですか?

M66 2025-06-23

PHPで画像処理を実行するとき、 ImageColorallocatealpha()は非常に重要な機能です。色を割り当てるだけでなく、透明性も制御します。ただし、多くの開発者は、多くの場合、適切なもののために、それを使用するときに異常な画像の透明性の問題に遭遇します。

この記事では、この問題を詳細に分析して、ImageColorallocatealpha()関数を正しく使用するのに役立ちます。

1 ?? ImageColorallocatealpha()の機能

ImageColorallocatealpha()は、GDライブラリベースの画像に透明性のある色を割り当てるために使用されます。
その基本的な構文は次のとおりです。

 int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )

パラメーター説明:

  • $画像ImageCreate()またはImageCreatetrueColor()によって作成された画像リソース。

  • $ red$ green$ Blue :RGBカラーコンポーネント、範囲0〜255。

  • $ alpha :透明度値、範囲0〜127

注:アルファは0〜255ではなく、 0(完全に不透明)から127(完全に透明)です

2 ??一般的なアルファ設定エラー

多くの開発者が犯す最初の間違いは、Alphaの価値はRGBのように0〜255であると考えていますが、255を直接詰め込みます。

例を見てみましょう:

 <?php
$img = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($img, 255, 0, 0, 255); // 間違い

ここに設定されたアルファセットは255ですが、GDライブラリは最大127しか受け入れません。範囲外であるため、GDはそれを127として扱い、完全に透明性をもたらします。

正しい書き込み:

 <?php
$img = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($img, 255, 0, 0, 0); // 不透明な赤
$semi_transparent = imagecolorallocatealpha($img, 255, 0, 0, 64); // 半透明の赤

3 ??間違った設定が透明性に影響するのはなぜですか?

GDライブラリはこの方法でアルファ値を理解しているためです。

  • 0:完全に不透明

  • 127:完全に透明

255に記入すると、GDはMIN($ ALPHA、127)を使用します。つまり、最大の透明度と見なされます。これは次のとおりです。

  • 私はもともと赤を描きたかったのですが、見ることができませんでした。

  • 私はもともと半透明を描きたいと思っていましたが、それは完全に透明であることが判明しました。

4 ??透明性を正しく制御する方法は?

覚えておいてください:アルファ範囲は0〜127で、0〜255ではありません。

0〜255の範囲(CSSやRGBA共通値など)で透明性デザインを使用する場合、変換を行う必要があります。

 $css_alpha = 128; // 仮定します 0–255 急行
$gd_alpha = intval(127 * (255 - $css_alpha) / 255); // に変換します GD 使用済み値

これにより、PHPに一貫した透明性が確保されます。

5 ??例:半透明のPNGを作成します

これらを完全な例と一緒にひもでつなぎましょう。