Riy*_*lla 16
Phil,我不知道你最终选择了哪种解决方案,但是如果您:使用Java缩放图像看起来相当不错:
我已经做了这些方法和增量扩展一起坚持以及支持的图像类型的测试的公平份额的关键所在 - 我看到亚历山大提到他仍然没有得到它的好运气这是一个令人失望.
我大约6个月前发布了imgscalr库(Apache 2),以解决"我想要这个图像的好看的缩放副本,现在就做好!"的问题.在读完类似10个这样的问题之后.
标准用法如下:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 640);
Run Code Online (Sandbox Code Playgroud)
第二个参数是边界宽度和高度imgscalr将使用缩放图像-保持它的比例,即使你在尺寸无效传递正确的-还有很多更详细的方法,但是这是最简单的用法.
您想要的用例,例如,如果Facebook限制图像为800x600像素,将如下所示:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY, 800, 600);
Run Code Online (Sandbox Code Playgroud)
这将确保图像保持最佳支持的图像类型,并使用Java可以集合的最高质量方法进行缩放.
在我自己的高分辨率测试中,我没有注意到使用此库/这些方法与缩放图像之间存在任何差距.例如,当您的图像被ImageIO加载器放入支持不良的图像类型时 - 例如,GIF会发生这种情况很多.如果你这样离开他们,并且不让他们脱离那些支持不好的类型,它最终看起来真的很眩晕和可怕.
这样做的原因是Java2D团队实际上为JDK可以处理的所有不同类型的BufferedImages提供了不同的硬件加速流水线 - 这些不常见的图像类型的子集都可以归结为使用相同的软件渲染管道.覆盖Java2D,导致图像质量差,有时完全不正确.这是一个PIA来解释并试图找出我刚刚将该逻辑直接写入库中.
如果您好奇,两个最受支持的类型是BufferedImage.TYPE_INT_RGB和_ARGB.
目前专门用于java中图像大小调整的两个最流行的开源库是:
Additonal有Java的JDK方式Graphics2D(参见关于如何做的这个问题),这种方法很难创建不好的结果,尤其是降尺度.ImageMagick还有一个Java接口,这里将省略它,因为它需要一个外部工具.
这是对580x852png 调整大小/缩减结果的比较145x213.作为参考,使用Photoshop CS5"save for web"调整大小.注意:结果是1:1 libs创建的只是复制在一起的内容.缩放不使用任何过滤,只是一个简单的最近邻居算法. 在这里你可以找到原始图像.
- Thumbnailator 0.4.8具有默认设置,无尺寸调整
- Photoshop CS5采用双三次算法
- imgscalr 4.2,ULTRA_QUALITY设置,无尺寸调整
- Graphics2D(Java 8),带渲染提示VALUE_INTERPOLATION_BICUBIC,VALUE_RENDER_QUALITY,VALUE_ANTIALIAS_ON
我留给读者选择最好的结果,因为这是主观的.一般情况下,都有着良好的除外输出Graphics2D.Thumbnailator生成更清晰的图像,非常类似于Photoshop输出,而imgscalr的输出则相当柔和.对于图标/文本等,您需要更清晰的输出,对于图片,您可能需要更柔和的输出.
以下是使用此工具的非科学基准测试和114幅图像,尺寸从大约96x96到2560x1440425%的图像创建:100%,150%,200%,300%和400%缩放版本(所以114*5缩放操作).所有库都使用与质量比较相同的设置(因此可能具有最高质量).时间只是缩放而不是整个过程.在i5-2520M上完成8GB Ram和5次运行.
- Thumbnailator:7003.0ms | 6581.3ms | 6019.1ms | 6375.3ms | 8700.3ms
- imgscalr:25218.5ms | 25786.6ms | 25095.7ms | 25790.4ms | 29296.3ms
- Graphics2D:7387.6ms | 7177.0ms | 7048.2ms | 7132.3ms | 7510.3ms
有趣的是,Thumbnailator也是最快的,平均时间为6.9秒,其次是Java2D,7.2秒,留下imgscalr,差26.2秒.这可能是不公平的,因为imgscalr设置为ULTRA_QUALITY似乎非常昂贵; 与QUALITY在一个更具有竞争力11.1秒设置它的平均值.
| 归档时间: |
|
| 查看次数: |
22034 次 |
| 最近记录: |