是否可以在不将其写入磁盘的情况下读取Byte []或Bitmap对象的Exif标头? 我只发现了一个构造函数ExifInterface(String filename),并且它似乎不可能做到这一点。你能确认一下吗?
否则,如何将该位图保存在缓存目录中并将其取回以读取Exif标头?
答案 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确实无法读取。