如何正确调整png图像的大小

时间:2011-09-14 07:52:58

标签: php png gd

我使用以下功能组合

$img_r = imagecreatefrompng($src);
$dst_1 = imagecreate( $targ_w_1, $targ_h_1 );
imagecopyresampled($dst_1,$img_r,0,0,0,0,$targ_w_1,$targ_h_1,$size_test[0],$size_test[1]);
imagepng($dst_1, $final_source_1,9);

最终结果质量非常低,因为我理解imagepng最高质量是9.你不能在那里写100。但质量仍然非常糟糕。也许我使用错误的函数来处理图像?有什么建议吗?

  1. 原始220x220图片 original 220x220 image

  2. 调整图片大小为120x120 resized image to size 120x120

  3. 调整大小相同的图像220x220 resized image with the same size 220x220

  4. 解决

3 个答案:

答案 0 :(得分:2)

查看manual。这可以在imagepng()的{​​{1}}参数:

上说明
  

压缩级别:从0(无压缩)到9。

所以9似乎是最差的质量水平。尝试较低的设置。

答案 1 :(得分:2)

据我所知,PNG格式和基础c库中没有质量设置。有压缩,但由于PNG是一种无损格式,压缩图像不会降低质量。

压缩设置为9时,压缩效果最佳(=最小文件大小)。

您遇到的问题可能是您的目标图片是使用imagecreate()创建的;一个调色板的图像。 您更有可能寻找imagecreatetruecolor()

答案 2 :(得分:1)

问题在于alpha。在我阅读Jaccos评论后,我去谷歌找到了这个

imagealphablending($dst_1, false);
imagesavealpha($dst_1,true);
$transparent = imagecolorallocatealpha($dst_1, 255, 255, 255, 127);
imagefilledrectangle($dst_1, 0, 0,$targ_w_1, $targ_h_1, $transparent);

在使用imagecreatetruecolor ad之后,必须正确处理代码的安静,一切都会好起来的。)