java - 给定一个 javafx.scene.image.Image 对象旋转它并产生一个旋转的 javafx.scene.image.Image 对象

标签 java image javafx transform exif

我有创建图像的代码:(m_img 是 javafx.scene.image.Image)

Image m_img = new Image("file:" + p_Fil.getAbsoluteFile(),false);

这很好,但它确实忽略了 exif TAG_ORIENTATION,因此在手机上以纵向模式拍摄的照片不会以正确的方式显示。

当我更改加载方法时,我能够读取此标记并将结果保存到一个 int (1-8) 中,如下所示:

byte bb[] = FileUtilities.readFile(p_Fil);
getOrientation(new ByteArrayInputStream(bb),p_Fil);
m_img = new Image(new ByteArrayInputStream(bb));
if (m_orientation==1) return; //1 means no transformation required

如果 m_orientation 为 1 则它是正确的,因此不需要进一步的操作。

但现在我需要根据返回的数字以某种方式转换图像。 (旋转,或翻转等)

我认为 javafx.scene.transform.Rotate 类应该对我有帮助。 任何人都可以提供示例代码,其中给定一个图像对象,您可以输出另一个旋转的图像对象。

最佳答案

为此您将不得不依赖 AWT:

我推荐使用这种方法:

public BufferedImage getRotatedImage(BufferedImage bufferedImage, int angle) {
     AffineTransform transform = new AffineTransform();
     transform.rotate(angle);
     AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
     bufferedImage = op.filter(bufferedImage, null);
     return bufferedImage;
}

然后:

BufferedImage buffImg= SwingFXUtils.fromFXImage(m_img, null);
buffImg = getRotatedImage(buffImage, 90); //or other angle if needed be
m_img = SwingFXUtils.toFXImage(buffImg, null);

关于java - 给定一个 javafx.scene.image.Image 对象旋转它并产生一个旋转的 javafx.scene.image.Image 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612985/

相关文章:

java - 在 ElasticSearch 中使用 Java API 搜索具有 Id 的字段时找不到文档

jquery - CSS/图像翻转/jQuery?

Android(eclipse)PNG透明度显示为黑色(附图片示例)

java - 如何在 JavaFX 中编辑文本字段选择的文本颜色?

java - 在 Vertx 中处理多部分表单

java - Tomcat - 数据库连接池问题

Java jnativehook 输入字符串不起作用

java - ImageIO.read() 无法读取某些图像

java - 如何使按钮在 FXML 中保持其大小

java - 在 Application.launch(Class, String... args) 中获取参数