减少png图像的大小而不会失去透明度

时间:2015-08-27 13:51:10

标签: php image

我正在尝试使用以下功能来缩小图像尺寸。但是当我使用具有透明度的图像时,此功能会在透明像素中重复图像并产生扭曲。 如何在不失去透明度的情况下减少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); 

1 个答案:

答案 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格式支持它,所以在每种情况下只能调用正确的函数。

如果之前有效,此脚本应该可以正常工作。请试一试。