有没有人可以告诉我如何lossless
在java中使用压缩来编写'jpeg'文件?
我使用下面的代码读取字节来编辑字节
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
而且我需要再次将字节写为“jpeg”文件而不压缩在lossy
.
有没有人可以告诉我如何lossless
在java中使用压缩来编写'jpeg'文件?
我使用下面的代码读取字节来编辑字节
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
而且我需要再次将字节写为“jpeg”文件而不压缩在lossy
.
JAI 包提供了保存“无损 JPEG”格式的能力。将压缩类型设置为JPEG-LS 或 JPEG-LOSSLESS根据您想要的变体,
不过,我不确定您是否真的想要无损JPEG。它是一种单独的格式,与普通的 JPEG 格式没有太大关系。一般来说,它并没有得到很好的支持。对于无损图像存储,通常最好使用 PNG 之类的东西。
如果您需要进行无损图像转码(即您可以在不干扰 DCT 矩阵边界的情况下进行的一组裁剪和旋转操作),您通常会使用jpegtran
命令来完成,因为目前没有 Java 绑定到 IJG 库我所知道的。
预计到达时间:
你知道如何用 JAI 来做吗?
我自己没有尝试过(下面的代码未经测试),但它应该是对setCompressionType
. (当然,Java 中的“直截了当”仍然意味着通过迷宫般的曲折小对象来设置其他任何地方的简单开关:)
ImageWriter writer= (ImageWriter) ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param= writer.getDefaultWriteParam();
param.setCompressionMode(param.MODE_EXPLICIT);
param.setCompressionType("JPEG-LS");
writer.setOutput(ImageIO.createImageOutputStream(new File(path)));
writer.write(null, new IIOImage(image, null, null), param);
JPEG-LS 是较新的无损 JPEG 标准。它比原始的 JPEG-LOSSLESS 标准压缩更多,但支持更差。大多数支持 JPEG 的应用程序将无法处理这些内容。