Android ExifInterface saveAttributes () Sin sobrescribir datos anteriores?
Estoy tratando de escribir lat-largo y otros datos a la cabecera Exif de un jpeg en mi aplicación de cámara personalizada. Normalmente, android llena automáticamente el encabezado con datos como apertura, ISO, velocidad del obturador, etc. Sin embargo, cuando agrego manualmente crear una instancia de ExifInterface
, establecer la ubicación GPS con SetAttributes()
y llamar a SaveAttributes()
; Todos los demás datos de la cámara desaparecen.
Se supone que pase esto? ¿Cómo puedo simplemente agregar una etiqueta sin sobrescribir todo lo demás?
- Copia de Android en el clipboard / clipdata
- Android cámara2 jpeg framerate
- BitmapFactory.decodeResource () ignora la opción inPreferredConfig para las imágenes jpg
- Cómo convertir matriz de bytes de una imagen a una cadena codificada en base64 que representa un jpg
- Cómo saber el formato jpeg sin decodificar toda la imagen (android)
Vi un ejemplo en otro lugar de la creación de dos ExifInterfaces, una antigua (de la imagen) y una nueva, y copiando cada valor poblado de la antigua a la nueva, junto con cualquier otro dato. Esto sin embargo, es molesto y largo. Me gustaría encontrar una solución mejor.
Aquí está mi código:
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(); }
Gracias
- Manera rápida de decodificar la imagen JPEG
- Integración o compilación de instrucciones para libjpeg-turbo en Android
- Lectura de metadatos EXIF de jpeg de androide de devolución de llamada de imagen
- Cómo rotar un archivo JPEG en Android sin perder calidad y ganar el tamaño de archivo?
- Cómo crear una imagen JPEG progresiva en Android
- Cámara adecuada2 YUV_420_888 a conversión de JPEG
- Mi codificador JNI JPEG para Android es muy lento
- Android / Java: Guardar una matriz de bytes en un archivo (.jpeg)
De la documentación que he visto esto esto no se supone que suceda. 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
Dice claramente que está copiando TODOS los datos, incluyendo las cosas que usted dice está desapareciendo. ¿Podrías publicar lo que estás probando? Si estás en Android Studio puedes intentar Archivo -> Invalidar Caché / Reiniciar -> Invalidar y Reiniciar.
Como alternativa, encontré una respuesta a una pregunta similar sobre la pérdida de los datos aquí: https://stackoverflow.com/a/13784057/3585278
Como otros han indicado, debe copiar los datos EXIF de la imagen original a la imagen redimensionada final. La biblioteca de Sanselan Android suele ser mejor para esto. Dependiendo de la versión del sistema operativo Android, el ExifInterface a veces corrompe los datos EXIF. Además, ExifInterface también maneja un número limitado de etiquetas Exif, es decir, sólo las etiquetas que "conoce". Sanselan por otro lado mantendrá todas las etiquetas EXIF y notas marcador. Aquí hay una entrada en el blog que muestra cómo usar Sanselan para copiar datos de imagen: http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/ BTW, en Android También tengo la tendencia a rotar las imágenes y eliminar la Orientación EXIF etiqueta. Por ejemplo, en un Nexus S con Android 4.03, la cámara estaba estableciendo una etiqueta de orientación en los metadatos EXIF, pero la vista web ignoraba esa información y mostraba la imagen incorrectamente. Lamentablemente, la rotación de los datos de imagen reales y la eliminación de la etiqueta de orientación EXIF es la única manera de conseguir que cada programa muestre las imágenes correctamente.
Espero que esto ayude.
- Realizar una pausa de actividad que no se reanuda después de volver a crear el método
- ¿Alguien ha utilizado el marco del teléfono y cómo lo calificarían?