|
|
1
17
Phil,我不知道你最终选择了哪种解决方案,但如果你:
我用这些方法做了相当多的测试,增量缩放以及坚持支持良好的图像类型是关键——我看到亚历山大提到他仍然没有好运,这很令人沮丧。 我释放了 imgscalr library (Apache 2)大约6个月前,在阅读了SO上类似的10个问题后,解决了“我想要这个图像的好看的缩放副本,现在就做!”的问题。 标准用法如下:
第二个参数是imgscalr将用于缩放图像的边界宽度和高度——即使您传递了无效的维度,也要保持其比例正确——有很多 more detailed methods ,但这是最简单的用法。 例如,如果Facebook将图像限制为800x600像素,您想要的用例如下:
这将确保图像保持在最受支持的图像类型中,并使用Java可以召集的最高质量方法进行缩放。 在我自己的高分辨率测试中,我没有注意到使用此库/这些方法缩放的图像有任何明显的差异,除非您的图像被ImageIO加载器放入支持较差的图像类型中——例如,GIF经常出现这种情况。如果你这样离开它们,不把它们从那些支持不佳的类型中解脱出来,它最终会看起来非常犹豫和可怕。 原因是Java2D团队实际上对JDK可以处理的所有不同类型的BufferedImages都有不同的硬件加速管道——这些不太常见的图像类型的一个子集都会在Java2D的掩护下使用相同的软件渲染管道,导致图像质量差,有时甚至完全不正确。这是一个解释并试图弄清楚的PIA,我只是将该逻辑直接写入库中。 最受支持的两种类型是BufferedImage。TYPE_INT_RGB和_ARGB,如果你好奇的话。 |
|
|
2
13
目前,在java中专门用于调整图像大小的两个最流行的开源库是:
此外,还有JDK与Java的结合方式
视觉质量
以下是调整大小/缩小比例的结果比较
我让读者选择最佳结果,因为这是主观的。一般来说,除了
计算时间
以下是使用此方法的非科学基准
tool
以及114幅图像,其尺寸约为
Here is the code used in this benchmark.
有趣的是
拇指爬行器也是最快的,平均时间为6.9秒
紧随其后
Java2D,7.2秒
离开
imgscalr落后26.2秒
。这可能不公平,因为imgscalr设置为
|
|
|
3
12
我什么都试过了,包括那些把戏 here |
|
|
4
5
要使用自定义质量调整图像大小,请使用thumbnailator.jar。 |
|
|
5
2
您使用的是什么渲染提示?通常双三次重采样是最好的。在你链接到的照片中,它们非常杂乱,这让我觉得你是在用最近的邻居作为暗示。
在
PictureScaler
您链接到的类,在
|
|
|
6
0
我希望在保持纵横比的前提下,实现最高质量的尺寸调整。 尝试了一些东西,读了几篇文章。浪费了两天时间,最后我用纯Java方法得到了最好的结果(还尝试了ImageMagick和Java图像缩放库):
|
|
|
7
0
经过几次令人沮丧的实验,我发现了以下内容 resize evaluation ,并在我的项目中采用了多通道方法。 为此,我将getScaledInstance()方法复制到缩略图生成器类中,将图像读取方法更改为使用ImageIO(该方法返回BufferedImage),现在 非常开心 ! 我将结果与Photoshop CS3中完成的大小调整进行了比较,结果非常相似。 |