또는 압축을 처리하는 데 사용할 수있는 더 나은 라이브러리가 있습니까?JPEG를 만들 때 Java의 ImageWriter에서 사용하는 압축 알고리즘을 변경할 수 있습니까?
내가 이미 이해 한 것으로 머리말을 붙이겠습니다. (1) JPEG이 손실됩니다 - 입력 파일과 동일하게 보이지 않습니다. (2) 아래의 코드 에서처럼 압축 품질 설정을 0.0에서 1.0 사이의 값으로 조정할 수 있습니다.
BufferedImage를 가져 와서 JPEG로 변환하고 Java ImageWriter의 .write() 메소드가 Photoshop "Save for Web"와 비교하여 JPEG 이미지에 대한 하위 파 결과를 생성하는 것을 예로 들겠습니다.
내 코드는 지금이 바로 같은 비트 같습니다
// img is a BufferedImage, here
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(.75f);
IIOImage image = new IIOImage(img, null, null);
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
writer.setOutput(ImageIO.createImageOutputStream(byteArrayOut));
writer.write(null, image, iwp);
writer.dispose();
압축 품질 설정으로 재생,하지만 심지어 그들이 무엇을만큼 좋은 보지 않는다 "1.0"설정에서 다른 품질의 출력을 생산 I JPEG를 만들 때 다른 도구를 사용할 수 있습니다.
나는 새로운 사용자이므로 아직 이미지를 게시 할 수 없습니다. here's a webpage that demos the differences. 바라건대 나는 비슷한 질문을하는 미래의 사용자를 위해 영구히 여기에 그들을 데려다 줄 수 있습니다.
분명히이 특정 이미지는 JPEG 압축의 가장 적합한 후보는 아닙니다 (PNG는 훨씬 작고 무손실 임). 그러나 압축 인공물을 더 쉽게 볼 수 있습니다. 실제 이미지는 주로 자연 사진입니다. 최소한 자바의 JPEG 압축 알고리즘과 품질에 대해 질문하는 것이 더 많습니다.
지금 당장 본 사람에게는 샘플 링크가 완료되었습니다. – timehat
더 나은 JPEG 압축을 표준 Java에 통합하는 것이 이상적입니다. 오픈 소스 클린 룸 구현 (GNU/Linux libjpeg?/특히 GNU Classpath)을 받아 Java로 포팅하십시오. 어쩌면 JUG에 대한 지원이있을 수도 있습니다. –