首页 >后端开发 >php教程 >如何在 PHP 中正确调整具有透明度的 PNG 大小?

如何在 PHP 中正确调整具有透明度的 PNG 大小?

Susan Sarandon
Susan Sarandon原创
2024-11-25 05:03:15368浏览

How to Properly Resize PNGs with Transparency in PHP?

在 PHP 中调整 PNG 的透明度大小:综合解决方案

在 PHP 中,调整具有透明背景的 PNG 图像的大小可能是一个挑战。为了解决这个问题,一个已被证明无效的代码示例需要进行一些关键的修改才能实现所需的结果。下面是需要调整的详细说明:

提供的代码:

$this->image = imagecreatefrompng($filename);

imagesavealpha($this->image, true);
$newImage = imagecreatetruecolor($width, $height);

// Make a new transparent image and turn off alpha blending to keep the alpha channel
$background = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
imagecolortransparent($newImage, $background);
imagealphablending($newImage, false);
imagesavealpha($newImage, true);

imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height,  $this->getWidth(), $this->getHeight());
$this->image = $newImage;  
imagepng($this->image,$filename);

仔细查看这段代码后,很明显问题出在 imagecolorallocatealpha() 的语句上被称为。正确的操作顺序在这里至关重要:您必须首先将混合模式设置为 false,并将保存 alpha 通道标志设置为 true 执行 imagecolorallocatealpha() 之前。

imagesavealpha($newImg, true);
imagealphablending($newImg, false);

执行此操作后修改后,您的代码应该能够成功调整具有透明背景的 PNG 图像的大小,防止背景变黑。

更新对于不透明度在 0 到 100 之间的图像:

提供的代码仅适用于不透明度设置为 0 的图像。如果图像的不透明度在 0 到 100 之间,背景将显示为黑色。要解决此问题,您需要调整 imagecopyresampled() 函数以使用 imagecopyresampled(),因为它可以更好地处理具有不同不透明度级别的透明 PNG 图像。

$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent);
imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);

以上是如何在 PHP 中正确调整具有透明度的 PNG 大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

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