A continuación verá una imagen de pasteles hermosa llamada "simit" de Turquía. Se toma de iPad 2, por lo tanto, es un JPEG con dimensiones 720 * 960.¿Se ha roto javax.imageio.ImageIO? Importa algunas imágenes como rotadas
El problema es que cuando uso javax.imageio.ImageIO.read
método, la imagen que importa es extrañamente a un BufferedImage
girar a la izquierda y se convierte en 960 * 720.
He reproducido esto en mi Sun JVM 1.6.0_29 en OS X y Sun JVM 1.6.0_26 en Debian. Aquí está el código:
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());
}
}
Genera width:960 height:720
, y al guardar esta imagen de salida, se gira a la izquierda como le dije antes. Si desea reproducir esto, código de descarga y la imagen de here y ejecute los siguientes comandos para generar y ejecutar:
javac Main.java && java Main
NOTA: Puede ver el JPG en el archivo como ya se ha girado, sin embargo, parece 720 * 960 en OS X, iPad, iPhone y, como puede ver arriba, se carga correctamente en imgur.com. Y también se abre correctamente en Adobe Photoshop, cargado correctamente en Facebook, etc.
¿Cuál podría ser el problema aquí?
Probablemente tenga razón. Acabo de confirmarlo desde algún Exif Viewer http://regex.info/exif.cgi Sin embargo, Apache Sanselan indica claramente que NO es compatible con JPEG. Lástima con ImageIO, todavía está buscando una solución. –
Con Sanselan puede leer la información de orientación EXIF, y luego rotar el mapa de bits que ha leído con ImageIO ... Por supuesto, una solución integrada sería mejor, pero no encontré ninguna que sea pura Java ... Siempre hay jMagick si JNI las bibliotecas son correctas –
http://stackoverflow.com/questions/5905868/am-i-making-this-too-complicated-image-rotation –