2013-06-19 4 views
2

Java에서 jpeg-lossess를 달성하는 방법은 무엇입니까?jpeg lossless를 달성하는 방법?

Exception in thread "main" 
    java.lang.IllegalArgumentException: Unknown compression type! 
    at javax.imageio.ImageWriteParam.setCompressionType(ImageWriteParam.java:1041) 
    at com.demandforce.ImageCrop.main(ImageCrop.java:59) 

param.getCompressionTypes()[JPEG] 인쇄 :

ImageWriter writer = (ImageWriter) ImageIO.getImageWritersByFormatName("JPEG-LS").next(); 
ImageWriteParam param = writer.getDefaultWriteParam(); 
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
param.setCompressionType("JPEG-LS"); 
writer.setOutput(ImageIO.createImageOutputStream(new File("C:\\Users\\RileyRen\\Desktop\\123.jpg"))); 
writer.write(null, new IIOImage(subBufferedImage, null, null), param); 

예외가 발생합니다.

JAI (버전 1.1.3)를 사용하여 :

Exception in thread "main" 
    java.lang.IllegalArgumentException: FileStore The specified format has no associated registered ImageCodec. 
    at javax.media.jai.JAI.createNS(JAI.java:1087) 
    at javax.media.jai.JAI.create(JAI.java:973) 
    at javax.media.jai.JAI.create(JAI.java:1621) 
    at com.demandforce.ImageCrop.main(ImageCrop.java:103) 

는 당신이 샘플을하시기 바랍니다 쓸 수 :

PlanarImage input = JAI.create("fileload", "C:\\Users\\RileyRen\\Desktop\\test.jpg"); 
    ParameterBlock pb = new ParameterBlock(); 
    pb.addSource(input); 
    pb.add(x); 
    pb.add(y); 
    pb.add(width); 
    pb.add(height); 
    PlanarImage output = JAI.create("crop",pb,null); 
    JAI.create("filestore",output,"C:\\Users\\RileyRen\\Desktop\\123.jpg","JPEG-LS"); 

이 또한 예외를 throw를?

+0

'System.out.println (Arrays.toString (param.getCompressionTypes()))'을 사용해보십시오. –

+0

[JPEG] ... –

+0

이상한. 첫 번째 클래스의 ImageWriter 클래스 이름을 인쇄 할 수 있습니까? JAI (JPEG-LS AFAIK를 사용할 수있는 유일한 작성기)의 CLibJPEGImageWriter를 가지고 있다면 JPEG-LS와 JPEG-LOSSLESS를 모두 지원해야합니다. 참고 :이 알고리즘은 동의어가 아니라 다른 알고리즘입니다. – haraldK

답변

3

표준 java에는 JPEG-LS의 압축 유형이 없습니다.

JAI (Java Advanced Imaging) API를 다운로드하여 사용할 수는 있지만 그러한 압축 유형이 포함됩니다.

은 첫 번째 코드는 오타가 here

+0

견본을 쓸 수 있습니까? –

+0

JAI를 설치 한 후에는 새 압축 유형을 설치하기 때문에 첫 번째 구현을 사용할 수 있습니다. 나는 이것이 실제로 당신이 다운로드하고 설치하고자하는 Java Advanced Imaging Image I/O 툴이라고 생각합니다. 이 링크에서도 사용 가능 –

+0

첫 번째 예제를 실행하기 전에 JAI가 이미 설치되었습니다. 그러나 Java Advanced Imaging Image I/O Tools를 사용해 보지 않았습니다. –

1

에서 다운로드 할 수 있습니다

param.setCompressionType("JPEG-lS"); 

그것은

param.setCompressionType("JPEG-LS"); 

(모두 대문자)이어야한다. 나는 그것이 다르게 정확하고 일해야한다고 생각한다.

가능한 유형을 쿼리하려면 param.getCompressionTypes() (메모에 명시된대로)을 사용하십시오.

+0

나는 그것이 문제가 아니라고 생각한다. "JPEG-LS", "JPEG-LOSSLESS"도 예외를 던졌다. 어쨌든,'param.getCompressionTypes()'는'[JPEG]'만을 출력한다. –

+0

확인. 혼동을 피하기 위해 질문을 편집해야합니다. :) – haraldK

+0

상기시켜 주셔서 감사합니다, @haraldK –