我有以下代码用于生成图像缩略图,但它仅适用于JPEG,原因不明,我无法弄清楚它为什么不能用于PNG?
function generate_image_thumbnail($source_image_path, $thumbnail_image_path)
{
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
switch ($source_image_type) {
case IMAGETYPE_GIF:
$source_gd_image = imagecreatefromgif($source_image_path);
break;
case IMAGETYPE_JPEG:
$source_gd_image = imagecreatefromjpeg($source_image_path);
break;
case IMAGETYPE_PNG:{
$source_gd_image = imagecreatefrompng($source_image_path);
break;
}
} //$source_image_type
if ($source_gd_image === false) {
return false;
} //$source_gd_image === false
$source_aspect_ratio = $source_image_width / $source_image_height;
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
$thumbnail_image_width = $source_image_width;
$thumbnail_image_height = $source_image_height;
} //$source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT
elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
$thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
$thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
} //$thumbnail_aspect_ratio > $source_aspect_ratio
else {
$thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
$thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
}
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
switch ($source_image_type) {
case IMAGETYPE_GIF:
imagegif($thumbnail_gd_image, $thumbnail_image_path, 90);
break;
case IMAGETYPE_JPEG:
imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
break;
case IMAGETYPE_PNG:{
//imagealphablending($thumbnail_gd_image, false);
//imagesavealpha($thumbnail_gd_image,true);
imagepng($thumbnail_gd_image, $thumbnail_image_path, 90);
break;
}
}
imagedestroy($source_gd_image);
imagedestroy($thumbnail_gd_image);
return true;
}
答案 0 :(得分:1)
问题出现在第二个案例中, 完全在
imagepng($thumbnail_gd_image, $thumbnail_image_path, 90);
根据imagepng函数
质量
Compression level: from 0 (no compression) to 9.
所以,将90改为9(例如)
imagepng($thumbnail_gd_image, $thumbnail_image_path, 9);
答案 1 :(得分:0)
imagepng($thumbnail_gd_image, $thumbnail_image_path, 90);
应
imagepng($thumbnail_gd_image, $thumbnail_image_path, 9);
你可能已经开始工作了。但我想推荐php库imagemagick。如果您可以在webhost上访问它,那么在处理图像时它是非常好的库。您也可以下载该库以在本地使用它。