I need to know if an image is landscape oriented or not, for that i´m getting the width and height of a BufferImage but sometimes the values appear as inverted.
This is the code I use to detect if an image is landscape:
public class ProcessImage{
private static final String IMAGE_ORIENTATION_ERROR ="001";
public static void main(String[] args) {
try {
File file = new File("C:\\myFolder\\nothing.jpg");
byte[] fileContent = Files.readAllBytes(file.toPath());
BufferedImage image = createImageFromBytes(fileContent);
validateImage(image);
System.out.println(image.getWidth());
} catch (IOException | ImageOrientationException e) {
e.printStackTrace();
}
}
private static BufferedImage createImageFromBytes(byte[] imageData) {
ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
try {
return ImageIO.read(bais);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/* Here is where i validate if the image is landscape
But Values of image.getWidth() and image.getHeight() appear as inverted.*/
private static void validateImage (BufferedImage image)
throws ImageOrientationException{
//if this happens the picture is NOT landscape
if (image.getWidth() < image.getHeight()) {
throw new ImageOrientationException(IMAGE_ORIENTATION_ERROR,
"error oriented picture");
}
}
}
У меня проблема в том, что для некоторых изображений значения heigth и width инвертированы .
Например, для изображения с шириной 3024 и высотой 4032 значения ширины и высоты, возвращаемые BufferImage, будут width: 4032< /strong> и height:3024. Но если я отредактирую то же изображение в Paint (с учетом исходных размеров), BufferImage вернет width: 3024 и height: 4032 (как и должно быть).
Я протестировал другие изображения с такой же шириной и высотой, и BufferImage получил правильные значения
У вас есть идеи, почему это происходит? Есть ли способ узнать, действительно ли изображение ориентировано на альбомную ориентацию?
Вот ссылка на изображение с проблемой: http://www.mediafire.com/file/n1a8uhy195zgesd/nothing.jpg/file
Заранее спасибо!