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


Reduce size of png image without losing transparency

我试图通过使用以下函数来减少图像大小。但是当我使用具有透明度的图像时,该函数会以透明像素重复图像并产生扭曲。如何在不失去透明度的情况下减少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格式支持它,所以它唯一的问题是在每种情况下调用正确的函数。

这个脚本应该正常工作,如果以前工作。