以下、トルコの「simit」という美味しいペストリーの画像が表示されます。それはiPad 2から撮影されたものなので、寸法は720 * 960のJPEGです。javax.imageio.ImageIOは壊れていますか?回転した画像を取り込みます
問題は、私はjavax.imageio.ImageIO.read
方法を使用する場合、それ妙輸入BufferedImage
にある画像が左に回転し960 * 720なる、です。
これは、私のSun JVM 1.6.0_29(OS X)とSun JVM 1.6.0_26(Debian)で再現しました。ここでは、コードです:
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
を出力し、私は、この出力画像を保存するとき、私は前に言ったように、それは左に回転させられます。しかし、それが表示され、あなたは既に回転アーカイブにJPGが表示されることがあります
javac Main.java && java Main
注:あなたがビルドして実行するhereからこの、ダウンロードコードや絵を再現し、次のコマンドを実行したい場合OS X、iPad、iPhone上の720 * 960で、上記のようにimgur.comに正しくアップロードされています。また、Adobe Photoshopでも正しく開かれ、Facebookに正しくアップロードされています。
ここで問題が発生する可能性はありますか?
おそらく正しいでしょう。私はちょうどいくつかのExifビューアhttp://regex.info/exif.cgiからそれを確認しました。しかし、Apache SanselanはJPEGをサポートしていないことを明確に述べています。 ImageIOに恥をかけて、まだ解決策を探している。 –
Sanselanを使用すると、EXIFの方向情報を読み取って、ImageIOで読み取ったビットマップを回転させることができます。もちろん、統合ソリューションは優れていますが、純粋なJavaは見つかりません... JNIライブラリはOK –
http://stackoverflow.com/questions/5905868/am-i-making-this-to-complicated-image-rotation –