【问题标题】:How to extract images from Thumbs.db in Java?如何从 Java 中的 Thumbs.db 中提取图像?
【发布时间】:2011-05-26 03:24:42
【问题描述】:

你好 我阅读了 POI 项目并尝试从 thumbs.db 中提取图像,但在代码中出现异常.. 代码 os

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:不是 JPEG 文件:以 0x0c 0x00 开头”

上述情况有什么问题? 您能建议一些其他方法来完成上述任务吗?

【问题讨论】:

    标签: java apache-poi


    【解决方案1】:

    您需要先阅读 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();
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 1970-01-01
      • 2013-02-04
      • 2021-06-12
      • 1970-01-01
      • 2017-04-30
      • 2015-07-01
      • 1970-01-01
      相关资源
      最近更新 更多