2012-06-12 2 views
2

모든 Exif 이미지 데이터를 복사 한 이미지를 복사하고 싶습니다.jpg Exif 정보 유지

이미지 개체로 jpg를 읽고 크기를 조정 한 다음 이미지 개체를 다른 폴더의 jpg 파일에 기록하는 Java 앱이 있습니다.

문제는 멋진 이미지 정보 (카메라, 날짜 등)가 모두 손실된다는 것입니다. 아이디어가 있으십니까? 안드로이드를위한 있지만

+0

exif 데이터를 의미합니까? – beerbajay

+0

아니요 - "exif"란 무엇입니까? 나는 그것에 대해 들어 본 적이 없다. –

+0

예 - 그게 내가 필요한거야 - 위키 백과 : Exif 데이터는 이미지 파일 자체에 내장되어 있습니다. 많은 최근의 이미지 조작 프로그램은 수정 된 이미지에 쓸 때 Exif 데이터를 인식하고 보존하지만 대부분의 구형 프로그램에서는 그렇지 않습니다. –

답변

0

하나의 옵션은이 같은 이미지 IO를 사용하는 것입니다

try (ImageInputStream inputStream = new FileImageInputStream(new File("Landscape_3.jpg"))) { 
     Iterator<ImageReader> readerIterator = ImageIO.getImageReaders(inputStream); 
     ImageReader reader = readerIterator.next(); 
     reader.setInput(inputStream); 
     Iterator<IIOImage> imageIterator = reader.readAll(null); 
     IIOImage image = imageIterator.next(); 

     BufferedImage srcImage = (BufferedImage) image.getRenderedImage(); 
     AffineTransformOp scaleOp = new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
     BufferedImage resultImage = scaleOp.createCompatibleDestImage(srcImage, null); 
     resultImage = scaleOp.filter(srcImage, resultImage); 
     image.setRenderedImage(resultImage); 

     ImageWriter writer = ImageIO.getImageWriter(reader); 
     try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_preserve_exif.jpg"))) { 
      writer.setOutput(outputStream); 
      writer.write(image); 
     } 
     try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_discard_exif.jpg"))) { 
      writer.setOutput(outputStream); 
      writer.write(image.getRenderedImage()); 
     } 
    } 

함정 :

  • 그것은 그것은 드문 이미지를 알수없는 실패 일반
  • 프레임 워크 IO 이미지로 느리다. 예 (javax.imageio.IIOException : JPEG 파일이 아닙니다 : 0xff 0xe2로 시작)
  • 소스 및 대상 이미지에 대해 동일한 색상 모델을 사용해야합니다. 결과적으로 bilinear 또는 bicubic 보간을 사용할 수 없습니다.
관련 문제