首页  >  文章  >  后端开发  >  为什么 imagecreatefrompng() 产生黑色背景而不是透明区域?

为什么 imagecreatefrompng() 产生黑色背景而不是透明区域?

Barbara Streisand
Barbara Streisand原创
2024-11-04 07:49:01390浏览

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