2017-12-05 5 views
0

JPEG 이미지에서 EXIF ​​메타 데이터가 포함되어 이미지가 표시되는 방향을 알려줍니다.ImageIO.read()는 EXIF ​​방향 메타 데이터를 고려합니까?

자바의 ImageIO.read()이 JPEG 이미지를 읽는 동안 EXIF를 고려하여 자동으로 변환을 적용할지 여부는 문제입니다.

더 구체적으로 말해서 EXIF가있는 JPEG 이미지를 PNG 이미지로 변환하는 데 Java ImageIO을 사용하면 PNG 이미지의 방향이 올바른 것입니까? 아니면 아래 코드가 EXIF ​​방향 지침을 고려하지 않고 PNG 이미지를 생성합니까?

private byte[] convertToPng(byte[] imageFileAsByteArray) { 
    ByteArrayInputStream bis = new ByteArrayInputStream(imageFileAsByteArray); 
    BufferedImage bi = ImageIO.read(bis); 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ImageIO.write(bi, "png", bos); 

    return bos.toByteArray(); 
} 
+0

'ImageIO.read()'는 (는) exif를 읽지 않습니다. ImageReader 클래스를 사용하여 이미지 메타 데이터를 읽고 복사해야합니다. – Uata

+0

메타 데이터를 복사하고 싶지 않습니다. PNG 이미지에는 EXIF ​​항목이 없습니다. EXIF 값에 따라 이미지를 변환 한 다음 EXIF ​​항목을 잊어 버린 다른 형식으로 저장하려고합니다. – SomethingSomething

+1

예, PNG. 죄송합니다. 그러나 어쨌든 메타 데이터를 수동으로 추출하여 이미지를 변환하는 데 사용해야합니다. 이 라이브러리도 좋습니다 : https://github.com/drewnoakes/metadata-extractor – Uata

답변

2

짧은 대답은 불행히도 아니오입니다. ImageIO.read(..) (기본값)은 Exif Orientation 태그를 고려하지 않습니다. 이에 따라 PNG가 회전되지 않습니다.


그러나 모든 ImageIO.read(..) 내부 입력에 적합한 ImageReader 플러그인을보고, 그것을 읽는 위임하는 것입니다 않습니다. JRE 번들 플러그인은 Exif를 고려하지 않지만 타사 ImageReader에서 지원을 추가 할 수 있습니다. 불행히도, 나는 그 일을 모른다. 그러나 나는 미래에 Exif orientation support to the TwelveMonkeys ImageIO JPEGImageReader을 추가 할 것을 고려 중이다.

한편 메타 데이터를 읽고 회전하여 직접 회전을 적용해야합니다. orientation 태그의 값은 ImageIO JPEG metadata 또는 타사 라이브러리를 사용하여 얻을 수 있습니다. 나는이 목적을 위해 metadata-extractor 또는 TwelveMonkeys ImageIO을 사용할 수 있다고 생각합니다. JAI ImageIO (TIFF 메타 데이터 사용) 또한이를 수행 할 수 있습니다. ImageIO에서 JPEG 메타 데이터를 사용하는 경우

,주의 :

EXIF ​​메타 데이터를 해석하고자하는 응용 프로그램은 태그가를 나타내는와 함께 unknown 마커 세그먼트를 확인해야합니다 javax_imageio_jpeg_image_1.0 형식의 메타 데이터 트리 구조를 제공하는 것으로 APP1 마커로 식별하고이를 Exif 마커 세그먼트로 식별하는 데이터를 포함합니다.

관련 문제