我正在尝试使用Java调整图像大小,并且需要获得与Photoshop最近邻居(保留硬边)重新调整大小时发生的确切效果。
问题在于,我从未获得完全相同的效果...
我尝试了以下方法:
1)使用mortennobel lib的java-image-scale
resampleOp.setFilter(ResampleFilters.getBoxFilter());
这个方法的效果很好,但是会留下一些图像伪影,而Photoshop处理时没有这种情况。
2)TwelveMonkeys图像处理库。(这里是GitHub链接)PointFilter会完全破坏内部渐变,Box filter与mortennobel getBoxFilter做的事情相同。
3)AWT AffineTransform,这是最糟糕的一个,调整大小完全不真实。
现在我很困惑,Photoshop的最近邻插值缩放是否与其名称所表示的含义不同,还是所有其他库都做错了(在第二种情况下,哪个库会做得正确?)
以下是Photoshop生成的图片:
![enter image description here](https://istack.dev59.com/qrLHs.webp)
![enter image description here](https://istack.dev59.com/FWmOX.webp)
![enter image description here](https://istack.dev59.com/gHOI8.webp)
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR
的结果与你想要实现的目标有多大差异(也可以参见https://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html#creating-scaled-instances)。 - Marco13ResampleOp
与PointFilter
应该产生与AffineTransformOp
和VALUE_INTERPOLATION_NEAREST_NEIGHBOR
完全相同的结果(因为它在内部使用它)。如果这不是,那么应该被视为一个错误。哦不!;-) - Harald K