Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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?

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

  • Cómo guardar una imagen JPEG en Android con un nivel de calidad personalizado
  • ¿Cómo abrir un archivo JPG como un BITMAP con el JPG almacenado en el SDCARD?
  • Copia de Android en el clipboard / clipdata
  • El tamaño de la imagen aumenta cuando se convierte de jpg a webp con un valor de calidad 100
  • Manera rápida de decodificar la imagen JPEG
  • ¿Cuál es la manera más eficiente de cargar mi archivo JPG almacenado en ImageView?
  • Android escribe EXIF ​​Latitude y Longitud GPS en JPEG falló
  • ¿Qué parte de los dispositivos Android beneficia de las optimizaciones de Libjpeg-turbo?
  • One Solution collect form web for “Android ExifInterface saveAttributes () Sin sobrescribir datos anteriores?”

    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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.