首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android中将EXIF元数据附加到序列化的位图?

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

Stack Overflow用户
提问于 2011-01-26 08:03:24
回答 1查看 9.4K关注 0票数 18

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

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

代码语言:javascript
复制
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数据:

代码语言:javascript
复制
String path = ... //bitmap file path
ExifInterface exif = new ExifInterface(path);
... = exif.getAttribute(...)

编辑:最好,我想找到一个不使用库的解决方案。如果我能得到包含EXIF的原始jpeg的字节数组的索引,并将这些字节添加到bitmap.compress(...)生成的字节数组中,那就最好了。

EN

回答 1

Stack Overflow用户

发布于 2011-05-11 15:45:54

感谢@Nick CampionSanselan

工作代码:

代码语言:javascript
复制
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!
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4800235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档