我正在尝试使用以下功能来缩小图像尺寸。但是当我使用具有透明度的图像时,此功能会在透明像素中重复图像并产生扭曲。 如何在不失去透明度的情况下减少png图像?
function compress($source, $destination, $quality)
{
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source);
else if ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source);
else if ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source);
imagejpeg($image, $destination, $quality);
return $destination;
}
$source_img = 'source.png';
$destination_img = 'destination.png';
$d = compress($source_img, $destination_img, 90);
答案 0 :(得分:0)
更改并在压缩函数中添加几行:
function compress($source, $destination, $quality)
{
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source);
imagejpeg($image, $destination, $quality); //Compress with jpg
else if ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source);
else if ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source);
imagepng($image, $destination, $quality); //Compress with png !!
return $destination;
}
$source_img = 'source.png';
$destination_img = 'destination.png';
$d = compress($source_img, $destination_img, 90);
重要的是理解为什么图像在png时会变成黑色背景颜色,这是因为透明度。 JPEG格式不允许你有一个透明的图像,只有PNG格式支持它,所以在每种情况下只能调用正确的函数。
如果之前有效,此脚本应该可以正常工作。请试一试。