2010-07-14 9 views
13

Ich möchte einige Metadaten in Bildern speichern. Meine Kameraanwendung gibt mir eine Bitmap, die ich im Speicher (MediaStore) speichern kann. Außerdem möchte ich dem Bild einige Metadaten hinzufügen. Ich denke, EXIF ​​ist ein guter Weg, dies zu tun. Aber ich konnte keine guten Referenzen dazu finden.EXIF-Metadaten in Bilder in Android schreiben

Wenn es einige Tools gibt, um diese Aufgabe in Android-Programmierung zu erreichen, lassen Sie es mich bitte wissen.

Dank

+1

ExifInterface kann etwas unzuverlässig sein - ich habe es korrupte EXIF-Daten unter bestimmten Umständen gesehen. Eine zuverlässigere Option, die mehr EXIF-Tags (einschließlich benutzerdefinierter EXIF-Tags) verarbeitet, ist Sanselan Android. http://code.google.com/p/sanselanandroid/ Nutzungsbeispiele für Sanselan Android finden Sie hier: http://massapi.com/source/sanselan-0.97-incubator/src/test/java/org/apache/sanselan/ sampleUsage/WriteExifMetadataExample.java.html – Theo

+0

Auschecken [this] (https://github.com/dragon66/pixymeta-android) – dragon66

Antwort

9

Ok, jemand (offline) wies mich auf eine nützliche Ressource. Die ExifInterface sieht aus wie ich gesucht habe. Android-er hat eine Post, die zeigt, wie man EXIF-Metadaten in Android liest und ich denke, das Schreiben sollte nicht sehr unterschiedlich sein.

Ich weiß es nicht, aber können wir EXIF ​​schreiben beliebige Metadaten, dh. andere als die in der ExifInterface documentation angegebenen (wie Breite, Länge, Blitz usw.). Wenn nicht, was könnte eine bevorzugte Methode zum Schreiben beliebiger Metadaten in Bilddateien sein?

Dank

+1

Könnten Sie eine neue Frage aus Ihrem zweiten Absatz machen, damit wir sie richtig beantworten können? (IMHO ist die Antwort ja) – MikeD

+1

gerade getan: http://stackoverflow.com/questions/15901971/writing-ebitrary-metadata-to-exif-in-android – vpk

+0

Ich habe auch diese nützliche Bibliothek gefunden: 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(); 
    } 
} 

kopierte ich die Antwort von here