PHP图片大小调整

5
我有一个PHP脚本,用于调整我的JPEG图片大小。但是,尽管我已经编程按照照片的方向比例计算x或y,但某种原因导致图像被扭曲了。质量为100,所以我不知道为什么会变形。我做错了什么?
编辑:
原始图像大小为3264px x 2448px
原始图像: http://imgur.com/DOsKf&hMAOh#0 重新调整大小: http://imgur.com/DOsKf&hMAOh#1 谢谢。
代码:
<?php

$im = ImageCreateFromJpeg('IMG_0168.jpg');

//Find the original height and width.

$ox = imagesx($im);
$oy = imagesy($im);

//Now we will determine the new height and width. For this example maximum height will    
be 500px and the width will be 960px. To prevent inproper proportions we need to know 
if the image is portrate or landscape then set one dimension and caluate the other. 

$height = 500;
$width = 960;
if($ox < $oy)   #portrate
{
   $ny = $height;
   $nx = floor($ox * ($ny / $oy)); 
} 
else #landscape
{
   $nx = $width;
   $ny = floor($oy * ($nx / $ox)); 
} 

//Then next two functions will create a new image resource then copy the original image     
to the new one and resize it.

$nm = imagecreatetruecolor($nx, $ny);
imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);

//Now we just need to save the new file.

imagejpeg($nm, 'smallerimagefile2.jpg', 100);

?>

我能想象到的唯一可能的失真是原始图像比输出图像小。 "IMG_0168.jpg" 的尺寸是多少? - Tim S.
你能展示原始图片和调整大小后的图片的例子吗? - Philippe Boissonneault
我已经在我的帖子中添加了原始尺寸和照片!谢谢大家。 - Matt
这不是失真,而是由于所有的线条和调整大小,也许@gurudeb的答案会做得更好。 - Philippe Boissonneault
2个回答

4

使用

imagecopyresampled($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);

而不是

imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);

解释:

imagecopyresized()可以快速轻松地更改图像的大小,但缺点是生成的图片质量较低。imagecopyresampled()和imagecopyresized()采用相同的参数,并以相同的方式工作,唯一的区别是调整大小后的图像会被平滑处理。缺点是平滑需要更多的CPU运算,因此生成图像的时间更长。

函数细节:


0

这完全取决于缩放过程中使用的算法。如果您使用像Gimp这样的图像编辑器,您将看到它可以使用的不同插值算法(即线性、立方等)。算法越复杂,缩放后的图像结果就越好,但需要更多的处理时间,因此需要更长的时间。

我不知道您是否可以更改GD使用的算法,但我相信如果您在PHP中使用ImageMagick库,则可以更改。


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