Я пытаюсь сжать изображение (прозрачный 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 (без любая внешняя библиотека)?
Заранее спасибо