Friday, December 17, 2010

java support for tiff and other image formats

Java ImageIO supports most common image formats like jpeg,png,gif,bmp etc..Tiff format is not one them.This caused some inconvenience when I was working on a face recognition app that uses tiff images from the JAFFE image database (http://www.kasrl.org/jaffe.html).So I had to use plugins from jai-imageio .To check availability of image readers for various image formats,I modified the code in my previous post slightly.
...
public static void checkImage(String name) throws IOException{
ImageInputStream imgInStream = ImageIO.createImageInputStream(new FileInputStream(name));
Iterator
readers = ImageIO.getImageReaders(imgInStream);
if (readers.hasNext()) {
ImageReader reader = readers.next();
System.out.println("At least one image reader exists for "+name);
System.out.println("image reader ="+reader);
}else{
System.out.println("No image reader exists for "+name);
}
}
public static void printAllSupportedImageFormats(){
String[] names = ImageIO.getWriterFormatNames();
System.out.println("supports "+names.length+" formats");
for ( String name: names ){
System.out.print( name +" ");
}
System.out.println();
}
public static void main(String[] args) throws IOException {
printAllSupportedImageFormats();
String img1 = "/home/sajan/Pictures/Bounty_Ship.jpg";
String img2 = "/home/sajan/Pictures/PGPHX82.GIF";
String img3 = "/home/sajan/Pictures/abe_natsumi.ppm";
String img4 = "/home/sajan/Pictures/abe_natsumi.pgm";
String img5 = "/home/sajan/images/JAFFEPRB/KLH158.tiff";
String[] imgs = new String[]{img1,img2,img3,img4,img5};
for (String img : imgs){
checkImage(img);
}
}


...
Using standard ImageIO,I got this result...

supports 12 formats
jpg BMP bmp JPG jpeg wbmp png JPEG PNG WBMP GIF gif
At least one image reader exists for /home/sajan/Pictures/Bounty_Ship.jpg
image reader =com.sun.imageio.plugins.jpeg.JPEGImageReader@1f42b49
At least one image reader exists for /home/sajan/Pictures/PGPHX82.GIF
image reader =com.sun.imageio.plugins.gif.GIFImageReader@87a5cc
No image reader exists for /home/sajan/Pictures/abe_natsumi.ppm
No image reader exists for /home/sajan/Pictures/abe_natsumi.pgm
No image reader exists for /home/sajan/images/JAFFEPRB/KLH158.tiff


After adding jai-imageio-1.1.jar to the classpath,the result was...

supports 24 formats
BMP raw JPEG2000 RAW jpeg tif WBMP jpeg2000 GIF TIF TIFF bmp jpg PNM JPG pnm wbmp png JPEG PNG jpeg 2000 gif JPEG 2000 tiff
at least one image reader exists for /home/sajan/Pictures/Bounty_Ship.jpg
image reader =com.sun.imageio.plugins.jpeg.JPEGImageReader@1adc30
at least one image reader exists for /home/sajan/Pictures/PGPHX82.GIF
image reader =com.sun.imageio.plugins.gif.GIFImageReader@1bc887b
at least one image reader exists for /home/sajan/Pictures/abe_natsumi.ppm
image reader =com.sun.media.imageioimpl.plugins.pnm.PNMImageReader@17ee8b8
at least one image reader exists for /home/sajan/Pictures/abe_natsumi.pgm
image reader =com.sun.media.imageioimpl.plugins.pnm.PNMImageReader@1995d80
at least one image reader exists for /home/sajan/images/JAFFEPRB/KLH158.tiff
image reader =com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader@1df280b


The ImageReader implementations for PNMImageReader and TIFFImageReader above are from jai-imageio .

No comments:

Post a Comment