Java图像大小调整 - 最近的邻居

问题描述:

我正尝试用Java重新调整图像的大小,并且我需要获得使用Photoshop最近邻居(保留硬边)重新调整大小时发生的确切效果。Java图像大小调整 - 最近的邻居

的事情是我从来没有得到确切的同样的效果......

我尝试以下方法:

1)Java的图像规模由mortennobel lib

resampleOp.setFilter(ResampleFilters.getBoxFilter()); 

这个执行很大,但在图像中留下了一些文物,当photoshop使用它时不存在。

2)用于图像处理的十二个图像库。 (here is the github link) 没有工作,PointFilter完全破坏了里面的渐变,而Box过滤器和mortennobel getBoxFilter做同样的事情。

3)AWT AffineTransform,这是最糟糕的一个,完全不切实际的调整大小。

现在我很迷茫,不Photoshop的近邻重新大小不同又是什么名字的意思,或其他所有的库做是错误的(在第二种情况下,那是什么都将做正确的lib?)

这里是之前和之后的图像生成的Photoshop

enter image description hereenter image description here

这里是从mortennobel LIB由get BoxFilter产生的图像。

enter image description here

我缩放图像有点激动,所以你可以看到细节,实际上它们是较小的。 任何帮助真的很感激:)我真的坚持这一点。

+0

mortennobel图书馆使用箱式过滤器,因此不是您要求的 - 最近的邻居。你有没有考虑自己编写代码?在没有任何过滤的情况下迭代原始图像像素并不困难。 – usr2564301 2014-09-21 11:39:40

+0

嗯..我以为盒式过滤器和最近的邻居是一样的。那么我已经考虑过了,但是我认为它可能会很慢,另外,应该有一个lib来做这件事吗?而不是花哨的过滤器使用简单的过滤器,这就是我想要的。我觉得Photoshop有另一个名字,如果我知道它,我会找到正确的lib。 – 2014-09-21 11:44:49

+2

您可能想要解释使用'RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR'的结果与您想要达到的结果的差异(另请参阅https://today.java.net/pub/a/today/2007/04/03/ perl-image-getscaledinstance.html#creating-scaled-instances) – Marco13 2014-09-21 12:35:58

巨大感谢Marco13指出这一点!显然mortennobel lib不会做最近邻, 而不是AWT的Graphics2D可以与RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR渲染提示一起使用。 以下是为我工作并生成photoshop精确图像的代码片段。

destinationBufferedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2 = destinationBufferedImage.createGraphics(); 
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); 
g2.drawImage(sourceBufferedImage, 0, 0, newWidth, newHeight, null); 
g2.dispose();