Cómo adjuntar metadatos EXIF ​​a un mapa de bits serializado en Android?

En Android, cuando se descifra un mapa de bits de una foto en el teléfono, se pierden los datos EXIF ​​del original. Estoy enviando este Bitmap a mi servidor vía un zócalo y quisiera re-attach los datos EXIF ​​que faltaban a los datos que eran enviados.

Tengo un código que carga un objeto Bitmap desde el MediaStore y lo comprime a una matriz de bytes en preparación para enviarlo a través de un socket:

Bitmap bitmap = ... ByteArrayOutputStream stream = new ByteArrayOutputStream(bitmap); bitmap.compress(CompressFormat.JPEG, 70, stream); byte[] input = stream.toByteArray(); 

Quiero utilizar el ExifInterface para obtener los metadatos EXIF ​​en el original jpeg en la tarjeta SD y de alguna manera añadir que a la matriz de bytes de salida de una manera que sería capaz de extraer un jpeg con todos los correctos EXIF ​​en el servidor Lado (esperemos que sin hacer esto en el servidor). Hasta ahora, he logrado utilizar ExifInterface para leer todos los datos EXIF:

 String path = ... //bitmap file path ExifInterface exif = new ExifInterface(path); ... = exif.getAttribute(...) 

EDIT: Optimally, me gustaría encontrar una solución que no utiliza bibliotecas. Si pudiera obtener los índices de la matriz de bytes de la jpeg original que contienen el EXIF ​​y prepend / append estos bytes a la matriz de bytes producidos por bitmap.compress(...) que sería mejor.

Gracias a @Nick Campion y Sanselan .

Código de trabajo:

 ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 100, bos); //Bitmap object is your image byte[] data = bos.toByteArray(); TiffOutputSet outputSet = null; IImageMetadata metadata = Sanselan.getMetadata(new File(filepath)); // filepath is the path to your image file stored in SD card (which contains exif info) JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata; if (null != jpegMetadata) { TiffImageMetadata exif = jpegMetadata.getExif(); if (null != exif) { outputSet = exif.getOutputSet(); } } if (null != outputSet) { bos.flush(); bos.close(); bos = new ByteArrayOutputStream(); ExifRewriter ER = new ExifRewriter(); ER.updateExifMetadataLossless(data, bos, outputSet); data = bos.toByteArray(); //Update you Byte array, Now it contains exif information! } 
  • Obtener datos Exif usando Uri
  • Android Crea atributos Exif personalizados para un archivo de imagen
  • Android: obtener una imagen ampliada de la interfaz de exhif
  • Cómo obtener datos Exif de un InputStream en lugar de un archivo?
  • Configuración de la orientación EXIF ​​de Android Photo
  • Escribir / Geotag JPEG (datos EXIF) en Android
  • No se puede establecer la fecha de captura / etiqueta DateTime mediante ExifInterface en Android
  • Android escribe EXIF ​​Latitude y Longitud GPS en JPEG falló
  • Cómo utilizar ExifInterface con una secuencia o un URI
  • Imagen de Android seleccionada de la galería La orientación siempre es 0: Exif TAG
  • ¿Compilación condicional en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.