PHP GD缩略图生成图像像素失真
Posted
技术标签:
【中文标题】PHP GD缩略图生成图像像素失真【英文标题】:PHP GD thumbnail generation image pixels distorted 【发布时间】:2014-10-24 17:29:10 【问题描述】:我有一个 php 脚本来生成图片上传的缩略图,使用 PHP GD 库。
缩略图的高度是固定的(在本例中为240px),其宽度将根据原始图像的纵横比计算。 前任。
$new_height = $thumbHeight;
$new_width = intval($thumbHeight * $width / $height);
但在某些图像中,输出的缩略图图像像素失真。下面的图片清楚地解决了我的问题。
生成缩略图后输出图像(左),但我想要输出图像在右
我的代码:
$file = "pic.jpg";
$thumbHeight = 240;
$progressive = false;
$img;
if(preg_match('/[.](jpg)$/', $file))
$img = imagecreatefromjpeg($file);
else if (preg_match('/[.](gif)$/', $file))
$img = imagecreatefromgif($file);
else if (preg_match('/[.](png)$/', $file))
$img = imagecreatefrompng($file);
else if(preg_match('/[.](jpeg)$/', $file))
$img = imagecreatefromjpeg($file);
$arr_image_details = getimagesize($file);
$width = $arr_image_details[0]; // width of input image
$height = $arr_image_details[1]; // height of input image
$new_height = $thumbHeight; // new thumbnail height
$new_width = intval($thumbHeight * $width / $height); // new thumbnail width
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
if($progressive) imageinterlace($tmp_img, 1);
imagejpeg( $tmp_img, "lag-$file",100 );
imagedestroy($img);
imagedestroy($tmp_img);
【问题讨论】:
你试过用imagecopyresampled
代替imagecopyresized
吗?
不,我没有尝试过..但是imagecopyresized
不同..?
相比imagecopyresized
,通常效果更好,图像更流畅
【参考方案1】:
使用imagecopyresampled()
函数代替imagecopyresized()
通常会使渲染的图像更平滑,因此在这种情况下可能会是解决方案。
【讨论】:
【参考方案2】:使用imagecopyresampled
而不是imagecopyresized
成功了..
原因:
imagecopyresized
将复制、缩放和图像。这使用了一种相当原始的算法,往往会产生更多像素化的结果。
imagecopyresampled
将复制和缩放图像,它使用平滑和像素插值算法,通常会产生比图像复制大小更好的结果,但会消耗少量 CPU。
【讨论】:
以上是关于PHP GD缩略图生成图像像素失真的主要内容,如果未能解决你的问题,请参考以下文章