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:
- Obtener la rotación de ExifInterface siempre devuelve 0
- Android Image Redimensionamiento y conservación de datos EXIF (orientación, rotación, etc.)
- ExifInterface no actualiza las etiquetas exif
- Android: poner GPSTimeStamp en jpg etiquetas EXIF
- Las imágenes tomadas con ACTION_IMAGE_CAPTURE siempre devuelven 1 para ExifInterface.TAG_ORIENTATION en algunos dispositivos más nuevos
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.
- Datos EXIF de Android siempre 0, cómo cambiarlo?
- Datos de Android Exif en archivo JPEG
- Rotar correctamente las imágenes web utilizando Picasso de Square
- Los metadatos Exif no proporcionan orientación para las imágenes de unidades de Google
- Una respuesta final sobre cómo obtener datos Exif de URI
- Android Guardar imagen Exif Información goes Wrong in Marshmallow 6.0.1
- ExifInterface JHEAD no puede abrir el error (android)
- ¿Cómo tratar con dispositivos Android que no respetan los datos de orientación EXIF?
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! }
- ¿Cómo debo seguir los fragmentos en Google Analytics v4?
- Navegador de Google Android que no respeta el desbordamiento de CSS