我想开发一个小软件(仅供个人使用)来缩小大量图片(使用Java)。在使用Java的“内置”函数NearestNeighbor、Bilinear和Bicubic后,结果质量很差...我使用了Lanczos算法,结果好多了,但仍然没有达到MS Paint的效果。注意:所使用的Paint版本是Windows 7版,我使用的Lanczos实现是Millie项目LanczosResamplePlugin.java中的,而内置的Java函数来自Graphics2D:
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
如果有人有想法可以达到相同的高质量结果,这将对我的结果图片和知识也有帮助。
以下是一些结果:
(我不会发布NN、双线性和双三次结果,因为它们给出的结果质量非常差)
下面是一张风景图片(在Google图片中找到)。原始文件大小为1680x1050,原始文件中的草地非常锐利(所以Paint的结果似乎比Lanczos更好)。
原始图像可以在此处查看: landscape-wallpaper-11a.jpg
Lanczos结果:
vs Paint 结果:
下面是另一张图片(个人图片),附有一些文字说明。您可以注意到,在Lanczos处理结果中,文本不太清晰易读(不够锐利),而在Paint处理结果中则较为清晰。此外,在黑色标题文本和白色文本区域之间,在Lanczos结果中存在一些噪点,而在Paint结果中却不存在。在底部,纸上的URL在第一种结果中完全模糊/不可读,在Paint结果中则可读。vs Paint 结果:
我首先认为微软使用了两种算法:一种用于缩小图片,另一种用于锐化结果图像?但是由于上一个示例中底部的url仍然可读,这可能不是由于缩小结果的锐化造成的...?谢谢
编辑
好的,我有点傻...图片上的噪声是由于jpeg压缩质量引起的(当我保存图片时,我的Java代码没有设置它)。
下面是png格式的结果,所以没有噪声。但结果仍然无法像画笔一样读取。
Lanczos cheese png