【发布时间】:2017-12-05 07:09:27
【问题描述】:
我有一个接收图像文件的 java 应用程序。我想使用 exif 信息来旋转它们。
在 StackOverflow 上,我发现了两种不同的方法,在这两种情况下,我都从 BufferedImage 开始:
BufferedImage image=ImageIO.read(sourceFile.getInputStream());
第一个解决方案来自this post。
ImageTransformer.ImageInformation imageInformation=ImageTransformer.readImageInformation(sourceFile.getInputStream());
AffineTransform tranform=ImageTransformer.getExifTransformation(imageInformation);
image=ImageTransformer.transformImage(image,tranform);
这里的一些帖子也推荐了第二个,使用 Thumbnailator:
BufferedImage image = Thumbnails.of(sourceFile.getInputStream()).scale(1).asBufferedImage();
两种方式都可以正确旋转我的图像。而且这两种解决方案都会改变颜色,这是我不想要的。我将附上两个文件,“白色”一个是旋转错误的原始文件。当我注释掉两个轮换代码时,这正是我所实现的。
如何通过改变旋转来获得原始颜色?
【问题讨论】:
-
Windows 资源管理器是否正确旋转图像?
-
是的。但是我在 C# 客户端中使用的 webbrowser 组件没有。我正在对图像进行 OCR,这也需要固定旋转。
-
我会试试这个。您知道如何为缩略图变体解决此问题吗?因为这是我更喜欢的一个。由于红色图像,我只使用了另一个:/
-
AffineTransformOp.TYPE_NEAREST_NEIGHBOR 这可以通过一种方法解决。我仍然会欣赏一个较短的解决方案;)