2011-05-25 16 views
5

HI he leído sobre el proyecto de puntos de interés y trató de extraer imágenes de thumbs.db pero conseguir una excepción en el código .. Código OS¿Cómo extraer imágenes de Thumbs.db en Java?

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(); 

Conseguir excepción como "com.sun.image.codec.jpeg.ImageFormatException: No es un archivo JPEG: comienza con 0x0c 0x00 "

¿Cuál es el problema con el caso anterior? ¿Puedes sugerir alguna otra forma de hacer la tarea anterior?

Respuesta

9

Debe leer el encabezado del archivo Thumbs.db antes de poder comenzar a extraer las imágenes. Pruebe con los cambios que agregué a continuación, debería eliminar el ImageFormatException que está recibiendo.

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(); 

Espero que ayude!

Cuestiones relacionadas