在 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中文网其他相关文章!