package filetools.tiff;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import org.apache.commons.io.FilenameUtils;
import org.apache.sanselan.common.IImageMetadata;
import org.apache.tika.metadata.Metadata;
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.lang.BufferReader;
import com.drew.lang.RandomAccessFileReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Tag;
import com.drew.metadata.exif.ExifReader;
import com.sun.media.jai.codec.FileCacheSeekableStream;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.TIFFDirectory;
public class TiffTestClass {
public static void main(String args[]) throws IOException, ImageProcessingException {
String tiffstr = utilities.BrowserDialogs.chooseFile();
InputStream is = new BufferedInputStream(new FileInputStream(tiffstr));
SeekableStream seekstr = new FileCacheSeekableStream(is);
TIFFDirectory tiffdir = new TIFFDirectory(seekstr, 0);
for (int i = 0; i < tiffdir.getNumEntries(); i++) {
// System.out.println(i);
// System.out.println(tiffdir.getField(i));
}
boolean cSB = seekstr.canSeekBackwards();
// System.out.println(cSB);
File tifffile = new File(tiffstr);
getImageTiffMetadata(tifffile);
getExifTiffData(tifffile);
}
public static void getExifTiffData(File tifffile) {
// com.drew.metadata.Metadata metaExif = new Metadata();
}
public static void getImageTiffMetadata(File tifffile) throws ImageProcessingException, IOException {
// works for tiff but has many unknown tags
com.drew.metadata.Metadata drewmetadata = null;
drewmetadata = ImageMetadataReader.readMetadata(tifffile);
if (drewmetadata != null) {
for (Directory directory : drewmetadata.getDirectories()) {
System.out.println("directory: " + directory);
for (Tag tag : directory.getTags()) {
System.out.println(" tag: " + tag);
}
}
}
}
public static void getImageMetadata(File tifffile) throws FileNotFoundException, IOException {
// does not seem to work for tiff
ImageInputStream iis = ImageIO.createImageInputStream(new BufferedInputStream(new FileInputStream(tifffile)));
String ext = FilenameUtils.getExtension(tifffile.toString()).toLowerCase();
Iterator<ImageReader> imgReaders = ImageIO.getImageReaders(ext);
// get the first image reader from the collection
ImageReader reader = imgReaders.next();
IIOImage image = null;
System.out.println("Test");
reader.setInput(iis, true);
image = reader.readAll(0, null);
IIOMetadata metadata = image.getMetadata();
String[] names = metadata.getMetadataFormatNames();
for (int i = 0; i < names.length; i++) {
System.out.println(("Format name: " + names[i]));
System.out.println(i);
System.out.println(metadata.getAsTree(names[i]));
}
}
}