Extrayendo etiquetas XMP de las fotos digitales

31 08 2008

Aunque el título sea un poco “extraño”, con este post pretendo explicar un poco como se pueden extraer las etiquetas de metadatos XMP que algunos programas como por ejemplo f-spot introducen para clasificar las fotos.

Esto viene a cuento porque después de clasificar todas las fotos del viaje a NY, algo así como 1200, me he puesto a exportarlas a una carpeta creando una galería web, para hacer más comodo el verlas dentro de un tiempo, y aquí empiezan los problemas, para empezar, el exporter, peta, y para continuar, no te clasifica las fotos por etiquetas, lo cual es una putada bastante decente, así que me he dicho, ¿porque no te haces un programita para hacer esta función? Así que en ello estoy.

Para empezar he empezado con lo más complicado, es decir, como leer los metadatos que el f-spot escribe en las fotos, al final he dado con que los datos XMP, son simplemente un fichero XML embebido en el archivo JPG, el problema viene entonces en como encontrar que fragmento del fichero JPG es que el contiene el XML, pero para esta tarea tenemos al tito google, que trás un par de búsquedas con diferentes términos, un enlace a una página en la que se muestra un fragmento de código que hace precisamente lo que queremos y además, en JAVA xD

El código es el siguiente:
public class XMLExtractor {
public String getXMP(File f) throws IOException {
FileInputStream is = new FileInputStream(f);
int i = 0;
String result = null;
while ((i = is.read()) != -1)
if (i == 0xFF && is.read() == 0xE1) {
result = checkNamespace(is);
if (result != null)
break;
}
return result;
}
public static final String namespace = "http://ns.adobe.com/xap/1.0/";
private String checkNamespace(FileInputStream is) throws IOException {
String s = getSegment(is);
return (s.startsWith(namespace)) ? s.substring(29) : null;
}
private String getSegment(InputStream is) throws IOException {
DataInputStream dis = new DataInputStream(is);
byte[] buffer = new byte[dis.readShort() - 2];
dis.read(buffer);
return new String(buffer);
}
}

Lo único que he hecho aquí ha sido mover el método main a otra clase.

Ya tenemos el contenido del XML, ahora solo tenemos que parsearlo para convertirlo en un objeto del tipo “Document” y obtener los datos que nos interesan por medio de operaciones sobre el árbol DOM del XML, para ello, añadimos un nuevo método llamado getTag a la clase anterior. Este método contiene el siguiente código, aunque de momento es solo una aproximación a hacer lo que nos interesa, por lo que puede que cambie bastante en los próximos días :)


public String getTag(String xml) {
// Converts the XML string to document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = null;
try {
DocumentBuilder builder = factory.newDocumentBuilder(); //el documento
document = builder.parse(new InputSource(new StringReader(xml))); //aqui le paso al Document
} catch(Exception e) {
e.printStackTrace();
}
document.toString();
document.setXmlVersion("1.0");
NodeList list = document.getElementsByTagName("rdf:li");
//NodeList list = document.getChildNodes();
Node node = (Node)list.item(0);
System.out.println(list.getLength()+" - "+node.getFirstChild().getNodeValue());
//XMPMetadata metadata = new XMPMetadata(document);
return node.getFirstChild().getNodeValue();
}

Bueno, de momento, esto es lo que hay, está probado y funciona, aunque como ya digo, este código es de prueba, por lo que solo nos devuelve el valor de la primera etiqueta que encuentra, en caso de que haya varias.

Cuando esté más avanzado el proyecto subiré el código para que se pueda descargar.



NY: De vuelta en casa

20 08 2008

Pues ya he vuelto, con algunos regalos para unos y con nada para otros, pero bueno, aunque llegué el lunes, entre el sueño y lo ocupado que he estado, no he tenido ni tiempo ni ganas de escribir, pero bueno, tal y como prometí, he escrito xD

Ahora, a empezar a ahorrar para el siguiente :)



NY: Día 19 – Fin de clases :D

16 08 2008

Fin de clases y problablemente fin de los posts del viaje, ya que mañana dudo mucho que haga nada interesante, ya que por idiota, me toca cambiarme de habitación, así que me tengo que ir por la mañana a las 11 y volver a las 15, lo que parte bastante el día, además, una vez que haga las maletas, no las voy a deshacer para sacar nada y ya el Domingo, me vuelvo a España.

Por otro lado, hoy tampoco ha sido demasiado emocionante, la única novedad es que he ido a Strawberry Fields, donde está el monumento homenaje a John Lennon, hay una foto, pero no tengo gana de subirla, así que ya la enseñaré o la pondré más tarde, de todas formas, tampoco tiene nada de especial.

Pues eso, que de momento corto la conexión durante unos días.



NY: Día 18 – Liberty Island

15 08 2008

Liberty Island es la isla donde se encuentra la estatua de la libertad, aunque eso seguro que ya lo sabiaís xD. Pues esta mañana hemos ido, ya que era lo único “importante” que nos quedaba por ver, así que aquí dejo unas fotos de la estatua y otras de las vistas de Manhattan y Jersey City desde la isla:






Y con esto acabamos por hoy.



NY: Día 17 – Central Park

14 08 2008

Esta mañana, me he levantado y me he ido a patearme el Central Park, que después de 3 semanas apenas había pasado por allí, y solo se puede decir que es enorme xD. Ahí van unas fotos:

La primera es del puente que da acceso a la reserva de Jackie Onassis, que es el lago que aparece en las dos siguientes:




Nos acercamos a la zona conocida como “Sheep Meadow”, que se encuentra en la zona sur del parque:


Y nos vamos, que se hace tarde para ir a clase xD


Esta noche, como dije que intentaría hacer, me he acercado a ver la iluminación del Empire State, y efectivamente, lucia unos colores rojos y amarillos de lo más españoles, al menos en su cara este :D


Bueno, mañana más (o no)



NY: Día 16 – Nada que contar

13 08 2008

Bueno, hoy ha sido un día de lo más tranquilo, para empezar, me he levantado a las 11:30, he ido a clase, y cuando ibamos a dar una vuelta, ha empezado a llover a cantaros, así que se ha jodio la cosa, pero bueno, mañana será otro día xD



NY: Día 15 – Guggenheim

12 08 2008

Hoy ha tocado hacer una visita rápida al museo Guggenheim, la idea era básicamente ver el edificio, pero cual ha sido nuestra decepción al ver que están en obras y la fachada está llena de pegotes de cemento xD, para colmo, cuando hemos llegado estaban cerrando, por lo que solo he podido sacar un par de fotos del interior y de una calidad no demasiado buena, pero bueno, bastante ha sido que el portero se ha portado y me ha dejado entrar para hacerlas :D

Ahí van 2 de las pocas fotos que he hecho, una del interior y otra del exterior:


Para compensar, pongo un fragmento del video que se reproduce una y otra vez a la entrada de la tienda M&M world, en Times Square, la tienda vende básicamente productos de M&M, desde los mismos M&M hasta muñequitos o dispensadores, un día de estos ire y haré alguna foto del interior, además, solo hay 3 en el mundo, y eso le da un atractivo especial xD




NY: Día 14 – Metropolitan Museum of Art

11 08 2008

Hoy a tocado otra vez museo, esta vez, ha sido el Metropolitan, visita bastante más recomendable que el Moma, para empezar, decir que es tremendamente grande, son 2 plantas, totalmente laberínticas y enormes, nuestra visita, parandonos solo en lo que nos interesaba y pasando lo demás bastante rápido, a durado casi 3 horas.

Hemos empezado viendo la enorme colección de arte egipcio, hay desde manuscritos hasta un templo completo (o casi) xD



Continuamos en la sección de armaduras y armas:


y pasamos a los clásicos de la pintura, tienen muchísimas obras de pintores españoles:

El Greco:


Dalí:


Miró:


Picasso, Goya, Velázquez y algunos más.

Lógicamente, también hay de otros pintores, aunque como no son españoles, solo pongo una foto de este autoretrato de Van Gogh:


Por último, una muestra de lo maravilloso que es el arte contemporáneo (lease con tono sarcástico)




NY: Día 12 – MoMa

10 08 2008

Ya tengo internet!!!, al final se ha arreglado antes de lo que se esperaba.

Bueno, al lio.

El viernes fuimos a visitar el Museo de Arte Moderno (MoMa) aprovechando que por la tarde era gratis, y menos mal, porque de las 5 plantas, a mi juicio, solo merece la pena visitar las 2 últimas, es decir, la 5ª y la 6ª. En la 5ª hay una exposición permanente con pinturas de gente importante, como Van Gogh o nuestro pintor más conocido, es decir, Picasso, entre las pinturas de este autor que se encuentran en este museo están dos de sus obras más conocidas (al menos por mí xD).

Las Señoritas de Avignon (Foto dedicada al amigo Sardaukar :D )

y los 3 músicos:


En la 6ª planta, que es la dedicada a exposiciones temporales, había una exposición de Dalí, pero no dejaban hacer fotos, así que os lo tendreis que creer xD

El resto del museo, está dedicado a arte contemporaneo, para mí, lo único destacable del resto es el retrato de Marilyn Monroe, por Andy Warhol y los cuadros de botes de Sopa xD



En una de las salas había una exposición de maquetas, y una de ellas era de un proyecto que están haciendo en Sevilla:


Al salir del museo, fuimos a dar una vuelta, y descubrimos que han cambiado la iluminación del Empire State, investigando un poco, descubrí que se va a ir cambiando todas las noches con los colores de las banderas de los paises participantes en los juegos olímpicos, a España le toca el 13, a ver si me acuerdo y hago alguna foto :)

El día 8 le tocaba a las banderas de Francia, Gran Bretaña, India y Portugal, las que se ven son las de Francia e India:



NY: Día 13 – Interrupción de la retransmisión

10 08 2008

Hoy he tenido que hacer un cambio en la residencia, en la nueva, tienen red wireless, pero algo pasa y hasta el lunes no funciona, así que este fin de semana se corta la retransmisión, el lunes, si al final se arregla, ya haré un post más extenso, que ahora estoy conectado a una red que he encontrado y no se lo que va a durar :D