如何通过此元数据提取器库查看exif标记数组?

时间:2016-11-07 04:32:14

标签: java android metadata exif metadata-extractor

无法找到要打印出方法getTagName()的整个数组的部分,因为它是标记形式而不是字符串。

https://drewnoakes.com/code/exif/

 try {
    InputStream is = new URL("http://www.dbituser1.dbitmobileappchallenge.com/uploadimage1/uploads/sample_0%20-%20Copy.jpg").openStream();
    BufferedInputStream bis = new BufferedInputStream(is);
    Metadata metadata = ImageMetadataReader.readMetadata(bis);

    for (Directory directory : metadata.getDirectories()) {
        for (Tag tag : directory.getTags()) {
            //Toast.makeText(DetailsActivity.this, "" + tag.getTagName() +": " + tag.getDescription(), Toast.LENGTH_LONG).show();
            if (tag.getTagName().contains("ISO")) {
                TextView text = (TextView) findViewById(R.id.textView);
                text.setText("ISO: " + tag.getDescription());
            }

            if (tag.getTagName().contains("Exposure")) {
                Toast.makeText(DetailsActivity.this, "This is the Date: " + tag.getDescription(), Toast.LENGTH_LONG).show();
                //TextView text = (TextView) findViewById(R.id.textView1);
                //text.setText("Exposure: " + tag.getDescription());
            }
        }
    }
} catch (ImageProcessingException e) {
} catch (IOException e) {
}

1 个答案:

答案 0 :(得分:0)

如果您只需要两个值,请不要迭代所有值。相反,请拉出您正在寻找的特定目录,然后直接提取标签。

从您的代码中看起来您需要ExifSubIfdDirectory

ExifSubIFDDirectory subIfd = metadata.getFirstDirectoryOfType(ExifSubIFDDirectory.class);

if (subIfd != null) {
    // NOTE these values could be null if they aren't present in the image's metadata
    Integer iso = subIfd.getInteger(ExifSubIFDDirectory.TAG_ISO_EQUIVALENT);
    Double exposureTime = subIfd.getDoubleObject(ExifSubIFDDirectory.TAG_EXPOSURE_TIME);
}