Android:Byte []或Bitmap对象的Exif

时间:2016-03-02 17:31:19

标签: android caching exif

是否可以在不将其写入磁盘的情况下读取Byte []或Bitmap对象的Exif标头? 我只发现了一个构造函数ExifInterface(String filename),并且它似乎不可能做到这一点。你能确认一下吗?

否则,如何将该位图保存在缓存目录中并将其取回以读取Exif标头?

3 个答案:

答案 0 :(得分:3)

您可以使用我的metadata-extractor库。它有一些类可以解码来自byte[]的Exif(和其他格式),流,文件...

这样的事情应该有效:

Metadata metadata = new Metadata();
new ImageMetadataReader().extract(new ByteArrayReader(bytes), metadata);

现在您可以检查Metadata对象。

lib可以通过Maven获得。

答案 1 :(得分:1)

@Drew Noakes的示例代码对我不起作用,在读取jpg byte []数据时发生错误:

GrallocMapperPassthrough: buffer descriptor with invalid usage bits 0x2080000
System.err: com.drew.imaging.tiff.TiffProcessingException: Unclear distinction between Motorola/Intel byte ordering: -40
System.err:     at com.drew.imaging.tiff.TiffReader.processTiff(TiffReader.java:60)

然后我改为以下代码,它可以工作!!

try {
    Metadata metadata = ImageMetadataReader.readMetadata(new ByteArrayInputStream(data), data.length, FileType.Jpeg);
    for (Directory directory : metadata.getDirectories()) {
        for (Tag tag : directory.getTags()) {
            Log.d(TAG, tag.toString());
        }
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (ImageProcessingException e) {
    e.printStackTrace();
}

答案 2 :(得分:0)

位图没有exif标头。您可以将位图保存为.png,但exif不是.png。您可以将位图保存为.jpg文件。但它将没有exif信息。但你希望我可以用Exifinterface添加它。

一个字节数组,如果它包含带有exif标题的.jpg文件就可以了。但Exifinterface确实无法读取。