Сжать размер прозрачного изображения PNG - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь сжать изображение (прозрачный png) с помощью следующего кода:

function png_has_transparency( $filename ) {
  if ( strlen( $filename ) == 0 || !file_exists( $filename ) )
      return false;        
  if ( ord ( file_get_contents( $filename, false, null, 25, 1 ) ) & 4 )
      return true;        
  $contents = file_get_contents( $filename );
  if ( stripos( $contents, 'PLTE' ) !== false && stripos( $contents, 'tRNS' ) !== false )
      return true;        
  return false;
}
function compressImage($source_url, $destination_url, $quality) {
  $info = getimagesize($source_url);
    if ($info['mime'] == 'image/png') {    
        $is_transparent = png_has_transparency( $source_url );
        echo $is_transparent;
        if($is_transparent){
            $image = imagecreatefrompng($source_url);
            imagealphablending($image, false); // setting alpha blending on
            imagesavealpha($image, true); // save alphablending setting (important)
            $is_succeed = imagepng($image, $destination_url, $quality);
        }else{
            $image = imagecreatefrompng($source_url);
            $is_succeed = imagepng($image, $destination_url, $quality);
        }
    }
  //save file  
  chmod($destination_url, 0664);
  //return destination file
  return $is_succeed;
}

compressImage("C:\/xampp\htdocs\avengers.png", "C:\/xampp\htdocs\OPT\avengers-optimize.png", 4);

Функция png_has_transparency() проверяет, является ли изображение прозрачным или нет.

Этот код отлично работает с простым изображением png и сжимает качество изображения, но для прозрачного изображения он странно увеличивает размер изображения.

Можем ли мы сжать это изображение в PHP (без любая внешняя библиотека)?

Заранее спасибо

...