我有创建图片的代码:(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类可以帮助我。 任何人都可以提供示例代码,在给定图像对象的情况下,您可以输出另一个旋转的图像对象。
答案 0 :(得分:1)
你必须依靠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);