2009-06-04 4 views
7

자바를 사용하여 jpeg 파일을 압축하고 싶습니다. 나는 이런 식으로 작업을 수행합니다 이미지의 메타 데이터를 잃지 않고 Java에서 jpeg 이미지를 압축하는 방법은 무엇입니까?

  1. 압축 속도와 다른 이미지를 파일에 쓰기 BufferedImage
  2. 로 이미지를 읽어보십시오. 쉬운 것 같다,하지만 난 ICC 컬러 프로파일과 EXIF ​​정보가 새 파일에 사라와 이미지의 DPI 그것은 원래 이미지와 다른 모습 (240) (72)에에서 삭제 찾을

OK. OS X에서 미리보기와 같은 도구를 사용합니다. 다른 정보에 영향을주지 않고 이미지의 품질을 완벽하게 바꿀 수 있습니다.

Java로이 작업을 수행 할 수 있습니까? 적어도 ICC 색상 프로파일을 유지하고 이미지 색상이 원점 사진과 동일하게 보이게하십시오?

답변

1
/** 
* @param inputFilenameWithPath : binary filepath 
* @param outputFilepath  : output image path 
* @param start     : from where the image start in binary file 
* @param len     : length of the image 
* @throws ImageAccessException 
*/ 
public void extractImageFromBinaryFile(String inputFilenameWithPath, String outputFilepath, int start, int len) throws ImageAccessException 
{ 
    try 
    { 
     File file = new File(inputFilenameWithPath); 
     FileImageInputStream iis = new FileImageInputStream(file); 

     // Added 
     byte[] b = new byte[start]; 
     iis.read(b, 0, start); 

     byte[] fb = new byte[]{}; 
     iis.read(fb); 

     IIOByteBuffer iiob = new IIOByteBuffer(fb, start, len); 
     iis.readBytes(iiob, len); 

     OutputStream os = new FileOutputStream(outputFilepath); 
     os.write(iiob.getData()); 
     iis.close(); 
     os.close(); 

    } 
    catch (IOException ioe) 
    {`enter code here` 
     throw new ImageAccessException("Image File read/write error"); 
    } 
} 
+0

코드를 설명하십시오. – hims056

+0

이것은 이미지를 읽고 출력하는 것으로 작동하는 것으로 보이지만 압축하는 이미지의 품질을 변경하는 데는 지원되지 않습니다. – guitarpoet

0

마지막으로이를 수행하는 방법을 찾으십시오.

javax.imageio.IIOImage를 사용하십시오. JpegImageReader가 읽을 수 있습니다.

그러나 버그가 6 년 동안 지속되었습니다. 다행히 :(

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4924909

, 당신은 몇 가지 해킹 (가짜가 JFIF 섹션)을 수행하고 작동하는 경우 :.

    : D

    그래서이 문제는 다음과 같이 해결 될 수있다

  1. ImageIO를 사용하여 jpeg 용 ImageReader를 얻으십시오
  2. jpeg 이미지를 메모리 버퍼에 저장하십시오.
  3. 버그 4924909에서 실패하면 buf 이미지를 수정하십시오 fer 가짜 JFIF 정보를 가지고
  4. ImageWriter를 사용하여 파일을 작성하고, ImageWriterParam이 트릭을하도록하십시오.

글쎄, 한가지를 제외하고는 출력 이미지가 원본 이미지보다 밝거나 (오히려 창백하다는 뜻) 괜찮을 것 같습니다. (미리보기를 사용하면 발생하지 않습니다. 압축 사진에 OS X의 문제는 내 코드 나 자바, 또는 내 잘못 사용 :()에 있어야합니다 그래서. 그래서, 자바에서 JPEG 압축을위한 내 문제가 아직 해결되지

.

어떤 제안 ?

+0

괜찮아요, 포기 해요 ImageIO가 잘 작동하지 않습니다. 적어도 나를 위해). 난 그냥 정보를 잃지 않고 압축하기 위해 이미지의 품질을 변경하고 원본 사진과 가능한 한 동일하게 보이기를 원합니다. 자바가 실패했습니다. ImageMagic과 JNI를 사용하여이 작업을 수행 할 것입니다. 아마도 내가 틀 렸습니다. 오라클의 도움을받을 수있는 사람은 누구입니까? – guitarpoet

관련 문제