2010-02-24 15 views
7

Estoy usando la clase android.hardware.Camera para tomar fotos y me parece que no hay datos exif almacenados en las imágenes. Si utilizo la aplicación de la cámara en mi DROID, todos los datos exif se guardan.Uso de Android SDK No veo ningún EXIF ​​en mi JPEG

He intentado configurar la rotación con Set() y SetRotation() para ver si puedo obtener algunos datos exif para mostrar. Cuando veo las imágenes en mi computadora portátil con un lector EXIF ​​me dice que la imagen NO tiene datos exif.

He visto algunas publicaciones similares, pero no he encontrado una solución para esto. ¿Alguien ha visto este problema con otros teléfonos?

estoy usando el SDK de Android 2.0.1

+0

Así que esto es lo que no entiendo. Cuando tomo una foto con la API de la cámara, espero obtener una imagen con datos EXIF ​​presentes. ImageData debe contener toda la información de la cámara como. El tiempo de exposición, el número F, ISO, la velocidad de obturación, etc ... ¿Por qué no se proporciona esta información cuando se utiliza la API de la cámara? – Travis

+0

Ver [Sanselan] (http: // stackoverflow.com/questions/4800235/how-to-attach-exif-metadata-to-a-serialized-bitmap-in-android/5960878 # 5960878) implementación – Vikas

Respuesta

13

Así que después de algunas investigaciones más descubrí que estaba perdiendo la información EXIF ​​cuando usaba el siguiente código para guardar los datos de la imagen en la tarjeta SD.

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize = 0; 
Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); 
FullFileName = sdImageMainDirectory.toString() + "/DCIM/Camera/" + getDateTime() + ".jpg"; 
fileOutputStream = new FileOutputStream(FullFileName); 
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
myImage.compress(CompressFormat.JPEG, quality, bos); 
bos.flush(); 
bos.close(); 

Cambié el código anterior simplemente para que sea esto, y ahora todos los datos EXIF ​​de la cámara están presentes.

FileOutputStream file = new FileOutputStream(FileName); 
file.write(imageData); 
+0

¿cómo obtuviste byte [] imageData? – Taranfx

+1

usando la aplicación de la cámara Android onPictureTaken devuelve la imagen como una matriz de bytes http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html – Travis

1

Según se desprende de los mensajes como this que la clase de cámara no es compatible con los datos EXIF, y la aplicación de la cámara utiliza su propia implementación EXIF.

Una opción sería buscar la fuente que se menciona en ese hilo y ver si hay algo que pueda usar.

Otra opción sería el proyecto sanselandandroid. El desarrollador admits que no es un puerto perfecto, pero el desarrollador es un participante activo en los grupos Google centrados en Android y vende su propio software de cámara Snap FX que incluye una aplicación llamada Camera FX que guarda datos EXIF ​​según el product page.

Buena suerte.

Las imágenes se guardan con etiquetas EXIF ​​que son compatibles con la mayoría de las aplicaciones de edición de software.

2

Gracias scntln!

Estoy usando esto de hecho en mi aplicación Camera FX. Funciona bien para incrustar etiquetas EXIF ​​en JPEGS (no en archivos PNG).

Android SDK versión 2.x tiene su propia clase ExifInterface que puede usar en su lugar. Pero si necesita soportar 1.6 o menos, entonces mi puerto sanselandroid debería funcionar bien.

Todavía estoy en el proceso de podar el proyecto sanselanandroid más para contener solo lo que es absolutamente necesario para simplemente escribir etiquetas EXIF.

BTW: Me di cuenta aquí que he deletreado 'compatiable' incorrectamente. Se corrigió eso en mi blog :)

Cuestiones relacionadas