imagecreatefrompng() が透明な領域ではなく黒い背景を生成するのはなぜですか?

Barbara Streisand
リリース: 2024-11-04 07:49:01
オリジナル
442 人が閲覧しました

Why does imagecreatefrompng() Produce a Black Background Instead of a Transparent Area?

imagecreatefrompng() 透明領域の代わりに黒い背景を生成しますか?

PHP では、imagecreatefrompng() 関数は PNG を操作するためによく使用されます。画像。ただし、この関数を使用すると、PNG 透明度が黒一色に変換される可能性があることが確認されています。

この問題を解決するには、imagecreatetruecolor() を使用して新しいキャンバスを作成した後、次の手順を実装できます。

  1. 黒色の割り当て: imagecolorallocate() 関数を使用して整数変数に黒色を割り当てます。
  2. 透明度から黒色を削除: imagecolortransparent() 関数を使用して黒を透明色として設定し、事実上非表示にします。
  3. アルファ ブレンディングを無効にする: アルファ チャネルを防ぐには、imagealphablending() を false 値で使用します。画像の色に混ざらないようにします。
  4. アルファ チャネルの保持を有効にする: 完全な透明度範囲を維持するには、imagesavealpha() を true 値で使用します。

これらの変更を実装すると、PNG 画像内のアルファ チャネル情報が保持され、黒い背景への変換が防止されます。更新されたコードは次のようになります:

<code class="php"><?php

// ... Before imagecreatetruecolor()

$dimg = imagecreatetruecolor($width_new, $height_new); // png ?: gif

// start changes
switch ($stype) {

    case 'gif':
    case 'png':
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($dimg , 0, 0, 0);
        // removing the black from the placeholder
        imagecolortransparent($dimg, $background);

        // turning off alpha blending (to ensure alpha channel information
        // is preserved, rather than removed (blending with the rest of the
        // image in the form of black))
        imagealphablending($dimg, false);

        // turning on alpha channel information saving (to ensure the full range
        // of transparency is preserved)
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}
// end changes

$wm = $w/$nw;
$hm = $h/$nh;

// ...</code>
ログイン後にコピー

以上がimagecreatefrompng() が透明な領域ではなく黒い背景を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート