我试图通过使用以下函数来减少图像大小。但是当我使用具有透明度的图像时,该函数会以透明像素重复图像并产生扭曲。如何在不失去透明度的情况下减少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);
更改并添加几行压缩函数:
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格式支持它,所以它唯一的问题是在每种情况下调用正确的函数。
这个脚本应该正常工作,如果以前工作。