PHP GD:调整大小时质量差?

6
我不喜欢我得到的重新调整大小的图片。
imagecopyresized($resized_img, $new_img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

ImageJpeg ($resized_img,"$path_thumbs/$rand_name.$file_ext", 100);

我在ImageJpeg中添加了100,因为我希望提高质量,但是它并没有变得更好。

如何在调整大小的图像/缩略图上提高质量?


https://github.com/libgd/libgd/issues/99 - Daniel
4个回答

29

尝试使用imagecopyresampled代替。它可以进行插值处理,使图像看起来更加清晰。


3
请确保在创建 $new_img 时使用 imagecreatetruecolor() 函数。 - JochenJung
1
如果您阅读了PHP手册,我很确定它会强烈建议使用上述两个函数。 - Christian

8
自 PHP 5.5 开始,您可以使用 imagesetinterpolation 来确定在转换期间(通常是 缩放和重采样,但也包括 旋转 等)图像的插值方式。

请参阅 http://php.net/manual/en/function.imagesetinterpolation.php

对于图像降采样,您可能想要使用 IMG_SINC 算法,它倾向于产生更清晰的结果。对于旋转也一样。

对于上采样,IMG_BICUBIC_FIXED、IMG_GENERALIZED_CUBIC 和 IMG_QUADRATIC 可能会产生更好的结果。最终您需要测试它们:尽快在新创建的图像资源上设置此选项,在保存 JPEG 时与高质量标志结合使用,这样在使用 GD 时就可以避免出现伪影。


是否有类似于PHP 5.3之前版本的替代选择? - 58YtQ2H83m17838963l61BU07Y8622

5

-1

我使用timthumb来实现这个功能。只是提供另一个选择 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接