ver metadatos los imagenes fotos fecha editar descargar como cambiar borrar android exif

los - ¿Cómo adjuntar metadatos EXIF a un Bitmap serializado en Android?



firebase storage android (1)

En Android, al descodificar un mapa de bits de una foto en el teléfono, los datos EXIF ​​en el original se pierden. Estoy enviando este mapa de bits a mi servidor a través de un socket y me gustaría volver a adjuntar los datos EXIF ​​que faltan a los datos que se envían.

Tengo algo de código que carga un objeto de mapa de bits de MediaStore y lo comprime en 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 usar ExifInterface para obtener los metadatos EXIF ​​en el jpeg original en la tarjeta SD y de alguna manera agregar eso a la matriz de bytes de salida de manera que pueda extraer un jpeg con todo el EXIF ​​correcto en el servidor Lado (esperemos que sin hacer esto en el servidor). Hasta ahora, logré usar el ExifInterface para leer todos los datos EXIF:

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

EDITAR: de manera óptima, me gustaría encontrar una solución que no utilice bibliotecas. Si pudiera obtener los índices de la matriz de bytes del jpeg original que contiene el EXIF ​​y añadir / agregar estos bytes a la matriz de bytes producida por bitmap.compress(...) sería lo 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! }