如何将EXIF元数据附加到Android中的序列化位图上?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (27)

在Android中,当从手机上的照片解码位图时,原件中的EXIF数据会丢失。我通过套接字将此位图发送到我的服务器,并希望将缺少的EXIF数据重新附加到正在发送的数据。

我有一些代码从MediaStore加载一个Bitmap对象,并将它压缩到一个字节数组,准备通过套接字发送它:

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

我想使用ExifInterface获取SD卡上原始jpeg中的EXIF元数据,并以某种方式将其添加到传出字节数组中,以便能够使用服务器上所有正确的EXIF提取jpeg 。到目前为止,我设法使用ExifInterface读取所有EXIF数据:

String path = ... //bitmap file path
ExifInterface exif = new ExifInterface(path);
... = exif.getAttribute(...)
提问于
用户回答回答于

这样的工作代码是可行的:

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!
}

扫码关注云+社区

领取腾讯云代金券