@Override public void extractMetadata(byte[] bytes, Map<String, String> md) { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(bytes)); try { Metadata metadata = ImageMetadataReader.readMetadata(bis, false); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { String key = tag.getTagName(); if (md.containsKey(key)) { key = String.format("%s (%s)", tag.getTagName(), tag.getDirectoryName()); } String value = directory.getDescription(tag.getTagType()); if (StringUtils.isNotEmpty(value) && value.startsWith("[") && value.endsWith("bytes]")) { byte[] tagBytes = directory.getByteArray(tag.getTagType()); value = Base64.encodeBase64String(tagBytes); } md.put(key, value); } } } catch (Exception ex) { ex.printStackTrace(); } } }
for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { String metadataName = tag.getDirectoryName().toLowerCase().replaceAll("\\s+", "_") + "." + tag.getTagName().toLowerCase().replaceAll("\\s+", "_"); if (metadataMappers.containsKey(metadataName)) {
private ExifMetadata getMetadataFromTag(Directory directory, Tag tag) throws MetadataException { ExifMetadata metadata = new ExifMetadata(); metadata.setDirectory(tag.getDirectoryName()); metadata.setKey(tag.getTagName()); metadata.setValue(tag.getDescription()); String values[]; Object value = directory.getObject(tag.getTagType()); if (value instanceof byte[]) { return null; } else if (value instanceof String) { values = new String[] {(String)value}; } else if (value instanceof String[]) { values = (String[])value; } else { values = new String[] {directory.getString(tag.getTagType())}; } values = decodeValues(values); metadata.setValues(values); return metadata; }