Contesto: Sto scrivendo un'app per fotocamera per un programma di messaggistica. Non riesco a salvare l'immagine catturata sul disco persistente in qualsiasi momento. La fotocamera deve supportare tutti gli orientamenti. La mia implementazione è quella degli esempi familiari di Surfaceview. Uso la classe Display per rilevare l'orientamento e ruotare la fotocamera di conseguenza. Nel callback jpeg di takePicture, costruisco una bitmap dal byte [] per aggirare alcuni problemi di proporzioni che stavo avendo: Camera API: Cross device issueslettura android jpeg Metadati EXIF da callback immagine
Descrizione del problema: Su alcuni dispositivi, la Bitmap costruita eseguita a ROTATION_270 (dispositivo ruotato di 90 gradi in senso orario) è capovolta. Finora, sembra essere Samsung. Posso solo supporre che forse la fotocamera è saldata in un altro modo o qualcosa in tal senso, ma non è né qui né lì. Mentre posso verificare se una bitmap è laterale, non posso controllare logicamente se è capovolta per dimensioni, quindi ho bisogno di accedere ai dati EXIF.
Android fornisce un parser per questo http://developer.android.com/reference/android/media/ExifInterface.html ma sfortunatamente ha un singolo costruttore che accetta un file ... che non ho e non voglio. Intuitivamente Potrei scrivere un costruttore per un array di byte ma che sembra davvero doloroso dato le loro chiamate in codice nativo http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2.1_r1/android/media/ExifInterface.java
La mia domanda ha poi due parti:
Qualcuno sa se il byte [] array contiene full EXIF jpeg header data come è o è il percorso attraverso il BitmapFactory.decode (...)/ BitmapFactory.compress (...) aggiungendo che in qualche modo?
Se questi dati EXIF sono usciti nell'array di byte, come è possibile analizzare le informazioni di orientamento in modo affidabile? risposta
Modifica 10/18/12
pcans' sotto coinvolge la parte 2 della mia domanda. Come ho indicato nei commenti sotto la sua risposta, se vuoi usare quel parser devi incorporare la fonte nel tuo progetto. I cambiamenti di cui quello legato SO postale sono già stati fatti e ripubblicato qui:
https://github.com/strangecargo/metadata-extractor
NOTA versioni più recenti di metadata-extractor lavoro direttamente su Android senza modifiche, e sono disponibili tramite Maven.
Tuttavia, per quanto riguarda la parte 1, ottengo 0 tag dal parser quando lo eseguo con l'array di byte che ottengo da takePicture. Mi preoccupo che l'array di byte non abbia i dati di cui ho bisogno. Continuerò a esaminare questo aspetto, ma accolgo con favore qualsiasi ulteriore intuizione.
Ho messo a disposizione una libreria di metadati Java per Android che può estrarre e inserire metadati (Exif, XMP, IPTC, ICC_Profile, Photoshop IRB ecc.) Per immagini come JPEG, TIFF, PNG, GIF ecc. Controllalo [qui] (https://github.com/dragon66/pixymeta-android) – dragon66
Articolo su [lettura e scrittura EXIF] (http://onetouchcode.com/2016/08/23/write-exif-data-image-android/) su un file immagine in Android – Shailendra
Questo link metadata-extractor ha bisogno di un .com: https://drewnoakes.com/code/exif/ – user4851