2015-01-01 14 views
11

Sto cercando di scrivere un User_Comment e TAG_GPS in un'immagine acquisita in un'applicazione Android utilizzando l'interfaccia exif, ma per qualche motivo i tag non sembrano essere aggiunti all'immagine quando visualizzo i dettagli dell'immagine nella galleria .Come scrivere dati exif per l'immagine in Android?

Sembra che forse i tag non vengano scritti nell'immagine acquisita poiché il percorso del file potrebbe essere errato. Penso che potrebbe essere perché ho scritto i tag su un percorso di immagine errato.

Qualcuno sa se il problema riguarda il modo in cui sto scrivendo i tag sull'immagine?

Questo è il codice che salva i dati exif seguenti modifiche @ Charlie seguito:

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

perché stai chiamando exif.saveAttributes più volte? Credo che ogni volta crei una nuova immagine. Mi chiedo semplicemente – wkhatch

+0

E 'possibile, non ho lavorato a questo progetto da un po', penso che il problema potrebbe essere stato il salvataggio dei dati in un'immagine temporanea chiamata "exif" e non viene mai scritto nell'immagine originale. –

risposta

3

Stai usando exifVar.toString(). Questo restituisce solo il nome del file, non il percorso dell'immagine. Poiché probabilmente la tua app non si trova nella cartella con le immagini, devi utilizzare exifVar.getAbsolutePath().

Se non stai scattando l'immagine mentre stai eseguendo il programma, il percorso non sarà corretto. Utilizzare questo codice invece:

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:

Secondo la vostra lista enorme di importazione:

import android.content.*; 

importazioni

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

che rende il vostro codice di un po 'più corto . Basta dire

+0

i dati exif non vengono ancora aggiunti ai dettagli dell'immagine dopo le modifiche precedenti, hai qualche idea? –

3

È necessario prima di copiare i file EXIF ​​qui google exif al progetto si trovano, quindi utilizzare il seguente codice:

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

ExifInterface usata qui è quello nuovo che avete appena aggiunto.

+0

Sarebbe meglio se fosse possibile specificare il tipo di dati e l'inizializzazione della variabile "exifi" – Deva

Problemi correlati