2010-07-14 7 views
13

Desidero memorizzare alcuni metadati nelle immagini. La mia applicazione fotocamera mi dà una bitmap, che memorizzo nel dispositivo di archiviazione (MediaStore). Oltre a questo, voglio aggiungere alcuni tag all'immagine nei suoi metadati. Penso che EXIF ​​sia un buon modo per farlo. Ma non sono riuscito a trovare buoni riferimenti su come farlo.Scrittura di metadati EXIF ​​per immagini in Android

Se ci sono alcuni strumenti per ottenere questo compito nella programmazione Android, per favore fatemelo sapere.

Grazie

+1

ExifInterface può essere un po 'inaffidabile - ho visto che i dati EXIF ​​corrotti in determinate circostanze. Un'opzione più affidabile che gestisce più tag EXIF ​​(compresi i tag EXIF ​​personalizzati) è Android Sanselan. http://code.google.com/p/sanselanandroid/ Esempi di utilizzo per Android Sanselan sono disponibili qui: http://massapi.com/source/sanselan-0.97-incubator/src/test/java/org/apache/sanselan/ sampleUsage/WriteExifMetadataExample.java.html – Theo

+0

Dai un'occhiata a [questo] (https://github.com/dragon66/pixymeta-android) – dragon66

risposta

9

Ok, qualcuno (offline) mi ha segnalato una risorsa utile. Il ExifInterface sembra quello che stavo cercando. Android-er ha un post che mostra come leggere i metadati EXIF ​​in Android e penso che la scrittura non dovrebbe essere molto diversa.

Non lo so, ma possiamo EXIF ​​per scrivere metadati arbitrari, ad es. diversi da quelli specificati nello ExifInterface documentation (come latitudine, longitudine, flash ecc.). In caso contrario, quale potrebbe essere il metodo preferito per scrivere metadati arbitrari in file immagine?

Grazie

+1

Potresti fare una nuova domanda dal tuo secondo paragrafo in modo che possiamo rispondere correttamente? (IMHO la risposta è Sì) – MikeD

+1

appena fatto: http://stackoverflow.com/questions/15901971/writing-arbitrary-metadata-to-exif-in-android – vpk

+0

Ho anche trovato utile questa libreria: 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(); 
    } 
} 

ho copiato la risposta da here

Problemi correlati