下面你会看到一张漂亮的糕点的图片,名为“simit" 来自土耳其。它取自 iPad 2,因此它是具有尺寸的 JPEG720*960.
问题是,当我使用javax.imageio.ImageIO.read方法,它奇怪地导入的图像是BufferedImage
向左旋转,变成960*720.
我在 OS X 上的 Sun JVM 1.6.0_29 和 Debian 上的 Sun JVM 1.6.0_26 中重现了此内容。这是代码:
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream stream = new FileInputStream(new File("IMG_0159.JPG"));
BufferedImage img = ImageIO.read(stream);
System.out.println("width:" + img.getWidth() + " height:"
+ img.getHeight());
}
}
它输出width:960 height:720
,当我保存这个输出图像时,它会像我之前所说的那样向左旋转。如果您想重现此内容,请从以下位置下载代码和图片here并运行以下命令来构建并运行:
javac Main.java && java Main
NOTE:您可能会看到存档中的 JPG 已旋转,但它在 OS X、iPad、iPhone 上显示为 720*960,并且如您在上面看到的,它已正确上传到 imgur.com。并且它也可以在 Adobe Photoshop 中正确打开,正确上传到 Facebook 等。
这里可能有什么问题?
该照片可能是在纵向模式下拿着 iPad 拍摄的,因此包含 EXIF 方向信息,ImageIO 会忽略该信息,但您可以使用其他库(例如 Apache Sanselan)来正确处理它。
所以图像本身是 960x720,但 MacOS、ImgUR、Facebook 等正确地考虑了 EXIF 信息。
西米特看起来很好吃:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)