2010-07-14 30 views
13

Quiero almacenar algunos metadatos en imágenes. La aplicación de mi cámara me proporciona un mapa de bits, que almaceno en el dispositivo de almacenamiento (MediaStore). Además de esto, quiero agregar algunas etiquetas a la imagen en sus metadatos. Creo que EXIF ​​es una buena forma de hacerlo. Pero no pude encontrar buenas referencias sobre cómo hacer esto.Escribir metadatos EXIF ​​para imágenes en Android

Si hay algunas herramientas para lograr esta tarea en la programación de Android, hágamelo saber.

Gracias

+1

ExifInterface puede ser poco fiable - He visto que los datos EXIF ​​de corrupción en ciertas circunstancias. Una opción más confiable que maneja más etiquetas EXIF ​​(incluidas las etiquetas EXIF ​​personalizadas) es Sanselan Android. http://code.google.com/p/sanselanandroid/ Ejemplos de uso de Sanselan Android están aquí: http://massapi.com/source/sanselan-0.97-incubator/src/test/java/org/apache/sanselan/ sampleUsage/WriteExifMetadataExample.java.html – Theo

+0

Revisa [esto] (https://github.com/dragon66/pixymeta-android) – dragon66

Respuesta

9

Ok, Alguien (sin conexión) me señaló a un recurso útil. El ExifInterface se parece a lo que estaba buscando. Android-er tiene una publicación que demuestra cómo leer los metadatos EXIF ​​en Android y creo que escribir no debería ser muy diferente.

No lo sé, pero podemos EXIF ​​para escribir metadatos arbitrarios, es decir. que no sean los especificados en el ExifInterface documentation (como latitud, longitud, flash, etc.). De lo contrario, ¿cuál podría ser el método preferido para escribir metadatos arbitrarios en archivos de imágenes?

Gracias

+1

¿Podrías hacer una nueva pregunta a partir de tu segundo párrafo para que podamos responderla correctamente? (En mi humilde opinión, la respuesta es Sí) – MikeD

+1

acaba de hacerlo: http://stackoverflow.com/questions/15901971/writing-arbitrary-metadata-to-exif-in-android – vpk

+0

También encontré útil esta biblioteca: https: // github.com/dragon66/pixymeta-android –

5
public static void writeFile (File photo, double latitude, double longitude) throws IOException{ 
    ExifInterface exif = null; 

    try{ 
     Log.v("latiDouble", ""+latitude); 
     Log.v("longiDouble", ""+longitude); 
     exif = new ExifInterface(photo.getCanonicalPath()); 
     if (exif != null) { 
      double latitu = latitude; 
      double longitu = longitude; 
      double alat = Math.abs(latitu); 
      double along = Math.abs(longitu); 
      String stringLati = convertDoubleIntoDegree(alat); 
      String stringLongi = convertDoubleIntoDegree(along); 
      exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, stringLati); 
      exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, stringLongi); 
      Log.v("latiString", ""+ stringLati); 
      Log.v("longiString", ""+ stringLongi); 
      exif.saveAttributes(); 
      String lati = exif.getAttribute (ExifInterface.TAG_GPS_LATITUDE); 
      String longi = exif.getAttribute (ExifInterface.TAG_GPS_LONGITUDE); 
      Log.v("latiResult", ""+ lati); 
      Log.v("longiResult", ""+ longi); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

que copian la respuesta de here

Cuestiones relacionadas