Java 缩小图像尺寸:什么决定了速度与质量的权衡?

Java 缩小图像尺寸:什么决定了速度与质量的权衡?,java,image,image-processing,image-scaling,Java,Image,Image Processing,Image Scaling,TL;博士 缩放图像并优化速度和质量时,目标图像大小是否比缩放比更重要 我正在开发一个图像服务器,它可以将图像缩放到各种大小。我们正在使用这个库,它有一个速度和质量的折衷方案。这些设置在最近邻、双线性和双三次插值方法之间进行选择 还有一个“自动”选项,它决定了速度与质量的最佳权衡。根据文件: 用于指示缩放实现应该完成所有工作 它可以创造尽可能好的结果。这种方法是可行的 对于较小的图片(800px或更小)和更小的图片最重要 对于较大的图片,此方法之间的差异非常重要 而且速度方法随着时间的推移变得越

TL;博士

缩放图像并优化速度和质量时,目标图像大小是否比缩放比更重要

我正在开发一个图像服务器,它可以将图像缩放到各种大小。我们正在使用这个库,它有一个速度和质量的折衷方案。这些设置在最近邻、双线性和双三次插值方法之间进行选择

还有一个“自动”选项,它决定了速度与质量的最佳权衡。根据文件:

用于指示缩放实现应该完成所有工作 它可以创造尽可能好的结果。这种方法是可行的 对于较小的图片(800px或更小)和更小的图片最重要 对于较大的图片,此方法之间的差异非常重要 而且速度方法随着时间的推移变得越来越不引人注目 源图像大小增加。使用自动方法将 缩小图像时自动选择“质量”方法 尺寸低于800像素

从该方法的实现来看,似乎最佳速度与质量决策是基于目标尺度下图像的最大维度做出的

这与我的直觉相反,质量与速度的最佳折衷取决于目标图像的大小,而不是缩放比。是否有人知道其他库在做出相同的权衡决策时会做什么,或者在选择插值算法时有优化速度和质量的第一手经验?

这是输出图像的总大小(以字节为单位)。他们试图在保持总体质量的同时最小化文件大小;文件大小越小,传输到客户端的速度就越快。你链接到的算法是,我建议你回顾一下他们所说的话(这里摘录)——

图像比例越大,越不明显 图像中的退化变得越来越严重,可以使用更快的算法 选中

该阈值(800)的值是在目视检查后手动选择的, 不同类型图像之间的A/B测试使用此 图书馆照片和截图


我不知道imgscalr的详细情况,但我同意,除了比例比之外的任何东西都应该很重要,这听起来很奇怪。。。当在任何维度上缩小1/2以上时,Java2D插值方法都做不好。谢谢Elliott。抱歉,如果我没有暗示我已经阅读了文档和源代码。我不明白的是,这个实现似乎意味着从400到300平方像素的缩放比从3200到800平方像素的缩放会产生更明显的伪影。这是违反直觉的部分。文档中还提到,质量的重要性基于源大小,但他们根据目标大小选择质量。这似乎也有点矛盾。我想我会自己做视觉A/B测试,看看结果。我想这意味着你不太可能注意到图像尺寸较大时质量较低的设置。这是一个质量为75%的3200x3200图像,可能比质量为95%的800x800图像看起来更好。