首頁  >  文章  >  後端開發  >  為什麼 imagecreatefrompng() 產生黑色背景而不是透明區域?

為什麼 imagecreatefrompng() 產生黑色背景而不是透明區域?

Barbara Streisand
Barbara Streisand原創
2024-11-04 07:49:01385瀏覽

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

imagecreatefrompng() 產生黑色背景而不是透明區域?

在 PHP 中,imagecreatefrompng() 函數通常用於處理 PNG映像。然而,據觀察,使用此函數時,PNG 透明度可能會轉換為純黑色。

要解決此問題,可以在使用imagecreatetruecolor() 建立新畫布後執行以下步驟:

  1. 指派黑色:使用imagecolorallocate() 函數將黑色分配給整數變數。
  2. 從透明度中刪除黑色: 利用 imagecolortransparent() 函數將黑色設定為透明顏色,有效地使其不可見。
  3. 停用 Alpha 混合: 使用 false 值的 imagealphablending() 來防止 Alpha 通道防止混合到影像的顏色中。
  4. 啟用 Alpha 通道保留: 使用真值的 imagesavealpha() 來維持完整的透明度範圍。

透過實施這些修改後,PNG 影像中的 Alpha 通道資訊將被保留,從而防止其轉換為黑色背景。更新後的程式碼將類似以下:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn