php对png图片尺寸修改后会导致透明背景不透明的解决方法

二级会员 站长
发表于技术杂文分类

在PHP中,当您使用GD库来调整PNG图片大小时,尤其是通过imagecopyresampled()函数,可能会遇到原本透明背景变为黑色或其他颜色的问题。这是因为GD在创建新图像时,默认填充的是黑色背景。对于保持PNG图片透明背景,应当采取以下步骤:


1.创建一个新的真彩色图像资源,并且指定其背景为透明:

// 创建一个与目标尺寸相同的真彩色图像资源,并设置背景透明 $dstImage = imagecreatetruecolor($newWidth, $newHeight); $transparentColor = imagecolorallocatealpha($dstImage, 0, 0, 0, 127); // 创建一个透明色 imagefill($dstImage, 0, 0, $transparentColor); // 填充背景为透明 imagesavealpha($dstImage, true); // 保存完整的 alpha 通道信息 imagealphablending($dstImage, false); // 关闭色彩混合

2.使用imagecopyresampled()进行缩放操作,同时保留源图像的透明度:

// 打开原始PNG图像并获取其资源 $srcImage = imagecreatefrompng('path/to/original.png'); imagealphablending($srcImage, false); imagesavealpha($srcImage, true); // 进行缩放操作 imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight); // 保存新的PNG图像,保持透明度 imagepng($dstImage, 'path/to/resized.png', 9); // 第三个参数是压缩级别,范围是0到9

这样,当您调整PNG图片尺寸时,应该能够正确地保留其原有的透明背景。记得在完成所有图像操作后释放内存:

imagedestroy($dstImage); imagedestroy($srcImage);

登录 分类