如何在Java中从Thumbs.db文件中提取图像?

5

你好,我了解POI项目并尝试从thumbs.db中提取图像,但在代码中遇到了异常。代码如下:

InputStream stream = new FileInputStream("C:\\Thumbs.db");
POIFSFileSystem fs = new POIFSFileSystem(stream);
DirectoryEntry root = fs.getRoot();
Entry entry = root.getEntry("2");
DocumentInputStream is = fs.createDocumentInputStream(entry.getName());
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(is);
JPEGDecodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(4,    JPEGDecodeParam.COLOR_ID_RGBA);
decoder.setJPEGDecodeParam(param);
BufferedImage originalBufferedImage = decoder.decodeAsBufferedImage();

当出现“com.sun.image.codec.jpeg.ImageFormatException:Not a JPEG file:starts with 0x0c 0x00”异常时,出现了什么问题?

您能否建议其他完成此任务的方法?

1个回答

9

在提取图像之前,您需要读取Thumbs.db文件的标头。尝试使用我下面添加的更改,它应该可以解决您遇到的ImageFormatException问题。

InputStream stream = new FileInputStream("C:\\Thumbs.db");
POIFSFileSystem fs = new POIFSFileSystem(stream);
DirectoryEntry root = fs.getRoot();
Entry entry = root.getEntry("2");
DocumentInputStream is = fs.createDocumentInputStream(entry.getName());

//Added to read the header lines and fix the ImageFormatException
int header_len = is.read();
for (int i = 1; i < header_len; i++) {
        is.read();
}

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(is);
JPEGDecodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(4,JPEGDecodeParam.COLOR_ID_RGBA);
decoder.setJPEGDecodeParam(param);
BufferedImage originalBufferedImage = decoder.decodeAsBufferedImage();

我希望您能从中受益!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接