【发布时间】:2013-06-15 18:56:36
【问题描述】:
如何在Java中实现jpeg-lossess?
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);
会抛出异常:
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]。
使用JAI(版本1.1.3):
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");
同样抛出异常:
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)
你能写一个示例吗?
【问题讨论】:
-
试试
System.out.println(Arrays.toString(param.getCompressionTypes()))。 -
奇怪。你能打印第一类的 ImageWriter 的类名吗?如果你真的有来自 JAI 的 CLibJPEGImageWriter(唯一能够支持 JPEG-LS AFAIK 的编写器),它应该同时支持 JPEG-LS 和 JPEG-LOSSLESS。注意:这些是不同的算法,不是同义词。