首页  >  文章  >  后端开发  >  为什么使用 imagecreatefrompng() 时 PNG 缩略图会失去透明度?

为什么使用 imagecreatefrompng() 时 PNG 缩略图会失去透明度?

Susan Sarandon
Susan Sarandon原创
2024-11-04 11:33:30638浏览

Why Do PNG Thumbnails Lose Transparency When Using imagecreatefrompng()?

图像缩略图中的 PNG 透明度丢失

使用 imagecreatefrompng() 函数通过 GD 库创建缩略图时,用户遇到了以下问题: PNG 的透明背景被替换为纯黑色。为了解决这个问题,让我们检查代码并确定解决方案。

提供的代码有效地调整图像大小并将其另存为 JPEG。然而,问题在于使用 imagecreatetruecolor() 函数初始化目标图像 ($dimg)。要保持 PNG 图像的透明度,需要执行其他步骤。这是代码的修改版本:

<code class="php">$dimg = imagecreatetruecolor($width_new, $height_new);

// Start changes for PNG transparency
switch ($stype) {

    case 'gif':
    case 'png':
        // Define black as a color
        $background = imagecolorallocate($dimg, 0, 0, 0);
        // Make black transparent
        imagecolortransparent($dimg, $background);
        // Disable blending to avoid mixing black with the image
        imagealphablending($dimg, false);
        // Enable alpha channel preservation
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}
// End changes

$wm = $w/$nw;
$hm = $h/$nh;</code>

通过添加这些步骤,我们确保:

  • 定义了透明背景颜色。
  • 透明颜色将从目标图像中删除。
  • 禁用 Alpha 混合以防止透明颜色与图像混合。
  • 保留 Alpha 通道信息,从而保持生成的缩略图的透明度。

以上是为什么使用 imagecreatefrompng() 时 PNG 缩略图会失去透明度?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn