Java 正在尝试压缩图像(Gzip+;Jpeg),然后将其解压缩
我正在尝试用png格式压缩一系列图像。似乎压缩进展顺利:Java 正在尝试压缩图像(Gzip+;Jpeg),然后将其解压缩,java,compression,gzip,jpeg,Java,Compression,Gzip,Jpeg,我正在尝试用png格式压缩一系列图像。似乎压缩进展顺利: FileOutputStream fos = null; GZIPOutputStream gzip = null; fos = new FileOutputStream(PATH_SAVE_GZIP); gzip = new GZIPOutputStream(fos); for (int i = 0; i < NB_OF_IMAGES; i++) { BufferedImage im = images.get(i).ge
FileOutputStream fos = null;
GZIPOutputStream gzip = null;
fos = new FileOutputStream(PATH_SAVE_GZIP);
gzip = new GZIPOutputStream(fos);
for (int i = 0; i < NB_OF_IMAGES; i++) {
BufferedImage im = images.get(i).getBufImg();
ImageIO.write(im, "JPEG", gzip);
}
gzip.finish();
gzip.close();
fos.close();
FileOutputStream=null;
GZIPOutputStream gzip=null;
fos=新文件输出流(路径\u保存\u GZIP);
gzip=新的GZIPOutputStream(fos);
对于(int i=0;i
但是我得到异常空指针。。。当我试图用代码解压时。
我做错了什么?您的问题是,您将所有图像写入一个
GZIP
流,并且在读取时,ImageIO
不知道一个图像从何处结束,下一个图像从何处开始
你有两个选择:
ZIP
代替GZIP
TAR
文件中,然后GZIP TAR,在读取时,您将首先解压缩,然后从TAR文件中提取图像我已经完成了我的项目,现在我知道答案了。这可以通过以下几种方式解决: 一种是使用ObjectOutput/Input流,并像对象一样写入缓冲区图像 另一种是使用ByteArrayOutputStream并像字节一样写入图像。在使用之前,您应该知道要写入的大小。所以我在每张图片之前就解决了这个书写尺寸。没有效率的方法。。。然而,这是可行的
fileOutputStream fos = new FileOutputStream(path);
GZIPOutputStream gzip = new GZIPOutputStream(fos);
gzip.write(shortToBytes(numImatges));
gzip.write(shortToBytes((short) 0));
for (int i = 0; i < dates.getNB_OF_IMAGES(); i++) {
if (images != null) {
im = images.get(i).getBufImg();
}
ByteArrayOutputStream byteOstream = new ByteArrayOutputStream();
ImageIO.write(im, "jpeg", byteOstream);
byteOstream.flush();
byteOstream.close();
gzip.write(shortToBytes((short) byteOstream.size()));
gzip.write(byteOstream.toByteArray());
}
//close streams
fileOutputStream fos=新的fileOutputStream(路径);
GZIPOutputStream gzip=新的GZIPOutputStream(fos);
write(短字节(numimages));
写入(短字节((短)0));
对于(int i=0;i
没有堆栈跟踪。我只是检查bi是否为null,它位于BufferedImage bi=ImageIO.read(fin)之后代码>问题似乎在于,您将所有图像写入一个GZIP流,而在读取它时,它不知道如何分割,这是否适用于单个图像?是的,它适用于单个图像。我想这是因为ImageIO不写分隔符。因此,当阅读时,它不知道在哪里完成一个图像并开始另一个图像,在使用GZIP之前,您必须以某种方式加入它们,或者只使用uze ZIP,您可以为使用GZIP所需的每个文件创建一个条目,这是必需的。如何执行此操作?