2015-01-01 12 views
11

Ich versuche, eine User_Comment und TAG_GPS zu einem aufgenommenen Bild in einer Android-Anwendung mit der Exif-Schnittstelle zu schreiben, aber aus irgendeinem Grund werden die Tags nicht an das Bild angehängt, wenn ich die Bilddetails in der Galerie anzeigen .Wie schreibt man Exif-Daten auf ein Bild in Android?

Es scheint, dass die Tags möglicherweise nicht in das aufgenommene Bild geschrieben werden, da der Dateipfad möglicherweise falsch ist. Ich denke, das könnte daran liegen, dass ich die Tags in einen falschen Bildpfad geschrieben habe.

Weiß jemand, ob es ein Problem mit der Art ist, wie ich die Tags in das Bild schreibe?

Dies ist der Code, der die EXIF-Daten folgende @ Charlies Änderungen unter speichert:

private File getOutputPhotoFile() throws IOException { 
      File directory = new File(Environment.getExternalStoragePublicDirectory(
         Environment.DIRECTORY_PICTURES), getPackageName()); 
      if (!directory.exists()) { 
      if (!directory.mkdirs()) { 
       Log.e(TAG, "Failed to create storage directory."); 
       return null; 
      } 
      } 


      String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ENGLISH).format(new Date()); 

      File[] files = directory.listFiles(); 

      File exifVar = new File(directory.getPath(), "IMG_" + timeStamp + ".jpg"); 
      if(files.length!=0) { 
       File newestFile = files[files.length-1]; 
       exifVar = new File(directory.getPath() + File.separator + newestFile.getName()); 
      } 

      String mString = "Generic Text..";  
      ExifInterface exif = new ExifInterface(exifVar.getAbsolutePath()); 
      exif.setAttribute("UserComment", mString); 
      exif.saveAttributes(); 


      exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, 
      String.valueOf(latituteField.toString())); 

      exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, 
      String.valueOf(longitudeField.toString())); 

      exif.saveAttributes(); 

      return exifVar; 




    } 
+0

Warum rufen Sie exif.saveAttributes mehrmals auf? Ich glaube, dass jedes Mal ein neues Bild entsteht. Ich frage mich, – wkhatch

+0

Es ist möglich, ich habe nicht an diesem Projekt seit einiger Zeit gearbeitet, ich denke, das Problem könnte gewesen sein, dass die Daten in einem Temp-Bild namens "Exif" gespeichert und nie auf das Originalbild geschrieben wird. –

Antwort

3

Sie exifVar.toString() verwenden. Dies gibt nur den Dateinamen und nicht den Pfad zum Bild zurück. Da sich Ihre App wahrscheinlich nicht im Ordner mit Bildern befindet, sollten Sie exifVar.getAbsolutePath() verwenden.

Wenn Sie das Bild nicht gleichzeitig mit dem Programm aufnehmen, ist der Pfad nicht richtig. Verwenden Sie stattdessen diesen Code:

File[] files = directory.listFiles(); 

if(files.length==0) { 
    // No images available 
    return; 
} 

File newestFile = files[files.length-1]; 

File exifVar = new File(directory.getPath() + File.separator + newestFile.getName()); 

Off-Topic:

Nach Ihrer großen Importliste:

import android.content.*; 

Importe

android.content.Context, 
android.content.DialogInterface and 
android.content.Intent 

, dass Ihr Code macht ziemlich viel kürzer . Nur zu sagen

+0

Die exif-Daten werden nach den obigen Änderungen immer noch nicht zu den Bilddetails hinzugefügt. Haben Sie Ideen? –

3

Sie müssen zuerst die EXIF-Dateien hier google exif zu einem Projekt befindet sich kopieren, verwenden Sie dann den folgenden Code ein:

ExifInterface exif = new ExifInterface(); 
exifi.readExif(exifVar.getAbsolutePath()); 
exif.setTagValue(ExifInterface.TAG_USER_COMMENT, mString); 
exif.forceRewriteExif(exifVar.getAbsolutePath())); 

ExifInterface verwendet hier ist die neue, die Sie gerade hinzugefügt haben.

+0

Es wäre besser, wenn Sie den Datentyp und die Initialisierung der Variablen "exifi" angeben können – Deva