2014-08-27 12 views
10

Sto provando a scrivere lat-long e altri dati sull'intestazione Exif di un jpeg nella mia app per telecamera personalizzata. In genere Android popola automaticamente l'intestazione con dati quali apertura, ISO, velocità dell'otturatore ecc. Tuttavia, quando aggiungo manualmente creare un'istanza , impostare la posizione GPS con SetAttributes() e chiamare SaveAttributes(); tutti gli altri dati della fotocamera scompaiono.Android ExifInterface saveAttributes() Senza sovrascrivere i dati precedenti?

È questo dovrebbe succedere? Come posso semplicemente aggiungere un tag senza sovrascrivere tutto il resto?

Ho visto un esempio altrove di creare due ExifInterfaces, un vecchio (dalla foto) e una nuova, e copiare ogni valore popolato dal vecchio al nuovo insieme a qualsiasi altro dato. Questo, tuttavia, è fastidioso e lungo. Mi piacerebbe trovare una soluzione migliore.

Ecco il mio codice:

try{ 
    ExifInterface exif = new ExifInterface(pictureFile.getAbsolutePath()); 
    exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, mGpsLocation.getLatDms()); 
    exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, mGpsLocation.getLonDms()); 
    exif.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, mGpsLocation.getAltDms()); 
    exif.saveAttributes(); 
} catch(IOException e){ 
    e.printStackTrace(); 
} 

Grazie

+0

Non sono sicuro del motivo per cui questo sta accadendo con voi. Ho provato lo stesso metodo che hai menzionato e nessuno dei miei dati EXIF ​​è stato sovrascritto. Solo la mia posizione GPS viene modificata dopo aver salvato gli attributi. Testato sui seguenti dispositivi, Nexus Prime - 4.2.1 Motorola Moto E - 4.4.4 –

risposta

0

Dalla documentazione che ho visto questo non dovrebbe succedere. http://developer.android.com/reference/android/media/ExifInterface.html

public void saveAttributes() 

Added in API level 5 
Save the tag data into the JPEG file. This is expensive because it involves copying all the JPG data from one file to another and deleting the old file and renaming the other. It's best to use setAttribute(String, String) to set all attributes to write and make a single call rather than multiple calls for each attribute. 

Throws 
IOException 

si dice chiaramente che è la copia di TUTTI i dati, comprese le cose che dici è fuga. Potresti postare su cosa stai provando. Se sei su Android Studio puoi provare File -> Invalida Caches/Restart -> Invalidate and Restart.

In alternativa ho trovato una risposta a una domanda simile di perdere i dati qui: https://stackoverflow.com/a/13784057/3585278

Come altri hanno indicato, è necessario copiare i dati EXIF ​​dall'immagine originale per l'immagine finale ridimensionata. La libreria Sanselan Android è in genere la soluzione migliore per questo. A seconda della versione del sistema operativo Android, , ExifInterface talvolta corrompe i dati EXIF. Inoltre, lo ExifInterface gestisce anche un numero limitato di tag Exif, ovvero , solo i tag che "conosce". Sanselan d'altra parte sarà mantenere tutti i tag EXIF ​​e le note dei marker. Ecco un post sul blog che mostra come utilizzare Sanselan per copiare i dati dell'immagine: http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/ BTW, su Android Tendo anche a ruotare le immagini e rimuovere il tag EXIF ​​di Orientamento. Ad esempio, su un Nexus S con Android 4.03, la fotocamera stava impostando un tag di orientamento nei metadati EXIF, ma la webview ignorava tali informazioni e visualizzava l'immagine in modo errato. Purtroppo, la rotazione dei dati effettivi dell'immagine e la rimozione del tag di orientamento EXIF ​​ è l'unico modo per ottenere correttamente ogni programma per visualizzare le immagini .

Spero che questo aiuti.

Problemi correlati