Dưới đây bạn sẽ thấy một hình ảnh của bánh ngọt đẹp gọi là "simit" từ Thổ Nhĩ Kỳ. Nó được lấy từ iPad 2, do đó nó là một JPEG với kích thước 720 * 960.Javax.imageio.ImageIO có bị hỏng không? Nó nhập khẩu một số hình ảnh như xoay
Vấn đề là, khi tôi sử dụng phương pháp javax.imageio.ImageIO.read
, hình ảnh nó lạ nhập khẩu là một BufferedImage
xoay sang trái và trở thành 960 * 720.
Tôi đã sao chép điều này trong Sun JVM 1.6.0_29 trên OS X và Sun JVM 1.6.0_26 trên Debian. Dưới đây là các mã:
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());
}
}
Nó ra width:960 height:720
, và khi tôi tiết kiệm hình ảnh đầu ra này, nó có thể xoay sang trái như tôi đã nói trước đó. Nếu bạn muốn tái sản xuất này, mã tải về và hình ảnh từ here và chạy các lệnh sau để xây dựng và chạy:
javac Main.java && java Main
LƯU Ý: Bạn có thể thấy JPG trong kho lưu trữ như đã xoay, tuy nhiên nó xuất hiện 720 * 960 trên OS X, iPad, iPhone và như bạn thấy ở trên, nó được tải lên chính xác đến imgur.com. Và nó cũng được mở chính xác trong Adobe Photoshop, được tải lên Facebook chính xác, v.v.
Điều gì có thể là vấn đề ở đây?
Có thể bạn đã đúng. Tôi vừa xác nhận nó từ một số Exif Viewer http://regex.info/exif.cgi Tuy nhiên Apache Sanselan nói rõ rằng nó KHÔNG hỗ trợ JPEG. Xấu hổ về ImageIO, vẫn đang tìm kiếm một giải pháp. –
Với Sanselan bạn có thể đọc thông tin định hướng EXIF, và sau đó xoay Bitmap bạn đã đọc với ImageIO .. Tất nhiên một giải pháp tích hợp sẽ tốt hơn, nhưng tôi thấy không có Java thuần túy ... Luôn có jMagick nếu JNI thư viện là OK –
http://stackoverflow.com/questions/5905868/am-i-making-this-too-complicated-image-rotation –