2011-08-22 19 views
5

Estoy buscando extraer la información relacionada con la cámara de un jpg usando Java. He buscado pero no he podido encontrar una solución a mi problema. Estoy exportando mis fotos de Aperture en mi mac (OS X 10.7) y quiero usar los datos de Aperture que están disponibles en la información del archivo.En Java, ¿cómo puedo extraer la información relacionada con la cámara de una imagen?

¿Alguna idea?

Estoy buscando tener las dimensiones y palabras clave extraídas de fotos como esta: 80.167.88.49/masters/test.html. Actualmente recibo una excepción cuando trato de usar Metadata Extractor. No sé si Aperture está agregando información que no se puede manejar, pero arroja una excepción en todas las fotos de Aperture.

Exception in thread "main" java.lang.NoClassDefFoundError: com/adobe/xmp/XMPException 
    at com.drew.imaging.jpeg.JpegMetadataReader.extractMetadataFromJpegSegmentReader(Unknown Source) 
    at com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(Unknown Source) 
    at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source) 
    at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source) 
    at ImageScaler.main(ImageScaler.java:141) 
Caused by: java.lang.ClassNotFoundException: com.adobe.xmp.XMPException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 5 more 

Código:

public static void main (String[] args){ 

    File image = new File("/Users/peterla/Desktop/P8214462.jpg"); 

    Metadata metadata = null; 
    try { 
    metadata = ImageMetadataReader.readMetadata(image); 
    } catch (ImageProcessingException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

    Directory directory; 

    // Keywords 
    directory = metadata.getDirectory(IptcDirectory.class); 
    String keywords[] = directory.getStringArray(IptcDirectory.TAG_KEYWORDS); 

    // Dimensions 
    directory = metadata.getDirectory(JpegDirectory.class);  
    String height = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT); 
    String width = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH);  
} 

Respuesta

4

Metadata Extractor tiene una interfaz simple para leer varios tipos de metadatos de muchos formatos de imagen digital. Esto incluye el formato de metadatos EXIF utilizado en imágenes jpeg. La biblioteca tiene un buen estilo Javadoc documentation.

El punto de entrada principal en la biblioteca es el objeto ImageMetadataReader.

La página Getting Started tiene una buena introducción, que incluye un buen ejemplo de cómo obtener un valor para una etiqueta específica de los metadatos del formato EXIF.

Actualización: Ejemplo para la extracción de palabras clave y Dimensiones

Directory directory; 
// Keywords 
directory = metadata.getDirectory(IptcDirectory.class); 
String keywords[] = directory.getStringArray(IptcDirectory.TAG_KEYWORDS); 

// Dimensions 
directory = metadata.getDirectory(JpegDirectory.class);  
String height = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT); 
String width = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH); 

Alternativas

alternativas incluyen la orden interna biblioteca java ImageIO y Sanselan.

+0

Es realmente genial. Muy fácil de implementar con los ejemplos, pero estoy teniendo dificultades para que funcione en mis fotos. Creo que Aperture podría agregar más información de la que el extractor puede manejar. Estoy buscando tener Dimensiones y palabras clave extraídas de fotos como esta: http://80.167.88.49/masters/test.html –

+0

@ Peter Larsen Agregué un código de ejemplo para extraer Cotas y palabras clave. Lo probé en tu imagen de ejemplo y funciona para mí. Dejame saber si necesitas mas ayuda. –

+0

No sé qué está pasando, pero sigo recibiendo el siguiente error en la misma imagen que ha probado. –

4

Se necesita una biblioteca para leer los metadatos EXIF. Hay un ejemplo de cómo hacerlo con ImageIO en este blog post.

Hay otras bibliotecas que también puede considerar dependiendo de sus necesidades. Por ejemplo, MetadataExtractor o Sanselan.

1

jhead, una herramienta de manipulación de encabezado JPEG EXIF, es otra opción.

Cuestiones relacionadas