Imagick::resizeImage与Imagick::scaleImage的区别

22

resizeImagescaleImage之间有什么区别?

如果图像的尺寸 > $myLimit,我需要调整它的大小。

示例(伪代码):

$myLimit = 1MB
user uplaod an image of 1000x1000 of 2MB
2MB > $myLimit
while( $imagefilesize > $myLimit  ) {
  resizeImageBy 0.9%;
}

//> output 900x900 image of 900 kB
while 代码块中,我应该使用哪种方法?
编辑:我找到了一个有用的东西:http://www.imagemagick.org/Usage/resize/但是有没有人能简化它?

哦糟糕,已修复。是resizeImage与scale的问题。 - dynamic
“size”是什么意思?宽度?高度? - ifaour
我真的不知道区别,但你尝试过这个了吗(第二段代码)? - ifaour
@if:我添加了一些模糊的伪代码来解释我需要什么。 - dynamic
我经常使用mogrify。不知道那个库是否支持它。 - Your Common Sense
2
哦,我的天!这个伪代码会让服务器崩溃! - Your Common Sense
3个回答

22
两者之间的区别似乎在于,scaleImage进行基于像素的原始调整大小,而resizeImage可以使用插值滤波器
imagick::INTERPOLATE_AVERAGE
imagick::INTERPOLATE_BICUBIC
imagick::INTERPOLATE_BILINEAR
...

这可能会产生更好的结果。

更多关于各种插值方法的信息请参见维基百科


@是的,我不知道,我不深入了解这些过滤器。我会尝试每一个,并根据结果的质量来判断。 - Pekka
3
在这里,您会发现一篇论文,其中提到Lanczos确实是一个不错的选择。只需阅读Lanczos部分,结论就在那里!哎呀,这篇论文是1990年的,可能已经过时了。想想看...因为您正在降低分辨率,所以并不需要太多。您甚至可以使用BOX滤波器,只需测试几张图像即可确定。 - Yuri
@是的,我不知道您试图通过缩放来解决什么问题——是文件大小还是分辨率。我认为您应该就此提出一个新问题,并说明您的目标是什么。 - Pekka

1
太棒了,他们自己的文档很糟糕...但没关系:在我看来,resizeImage更强大,因此是更好的选择...这个链接展示了不同过滤器的使用方法和一些测量数据。

是的,这里的文档缺乏一些内容。可能是因为GD是“内置”的,每个人都使用它(即使它们很糟糕)。 - dynamic

0
根据我的研究,当您想要缩小图像时,请使用resizeImage。因为它可以让您控制图像质量和要使用的滤镜类型。但是在同样的情况下,scaleImage也是一个不错的选择,因为当您必须将图像缩小到,例如十分之一的比例,并且您正在使用resizeImage时,那么您的结果图像将具有许多图形错误。
在第二种情况下,当您必须扩大图像时,resizeImage肯定会出现图形错误,例如白色斑点、线条和其他内容。在这种情况下,scaleImage会提供帮助。

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