Skip to content

Instantly share code, notes, and snippets.

@tecywiz121
Created February 7, 2017 22:32
Show Gist options
  • Save tecywiz121/7373bee1086bdd98c6306adb121479f2 to your computer and use it in GitHub Desktop.
Save tecywiz121/7373bee1086bdd98c6306adb121479f2 to your computer and use it in GitHub Desktop.
Quick tool to print imageio metadata adapted from: http://johnbokma.com/java/obtaining-image-metadata.html
import java.io.File;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
public class Metadata {
public static void main(String[] args) {
Metadata meta = new Metadata();
int length = args.length;
for ( int i = 0; i < length; i++ )
meta.readAndDisplayMetadata( args[i] );
}
void readAndDisplayMetadata( String fileName ) {
try {
File file = new File( fileName );
ImageInputStream iis = ImageIO.createImageInputStream(file);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
while (readers.hasNext()) {
iis.seek(0);
ImageReader reader = readers.next();
System.out.println("Reader: " + reader.getClass().getCanonicalName());
// attach source to the reader
reader.setInput(iis, true);
// read metadata of first image
IIOMetadata metadata = reader.getImageMetadata(0);
String[] names = metadata.getMetadataFormatNames();
int length = names.length;
for (int i = 0; i < length; i++) {
System.out.println( "Format name: " + names[ i ] );
displayMetadata(metadata.getAsTree(names[i]));
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
void displayMetadata(Node root) {
displayMetadata(root, 0);
}
void indent(int level) {
for (int i = 0; i < level; i++)
System.out.print(" ");
}
void displayMetadata(Node node, int level) {
// print open tag of element
indent(level);
System.out.print("<" + node.getNodeName());
NamedNodeMap map = node.getAttributes();
if (map != null) {
// print attribute values
int length = map.getLength();
for (int i = 0; i < length; i++) {
Node attr = map.item(i);
System.out.print(" " + attr.getNodeName() +
"=\"" + attr.getNodeValue() + "\"");
}
}
Node child = node.getFirstChild();
if (child == null) {
// no children, so close element and return
System.out.println("/>");
return;
}
// children, so close current tag
System.out.println(">");
while (child != null) {
// print children recursively
displayMetadata(child, level + 1);
child = child.getNextSibling();
}
// print close tag of element
indent(level);
System.out.println("</" + node.getNodeName() + ">");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment