Rotating pages in TIFF files

Hi there,

After some effort and reading of this forum (thanks!) I've got some code together that will read a byte array containing a two page TIFF file and output it as an ArrayList, while maintaining the metadata and ended-ness of it (important for my application).

The big problem I now face is this. I need to read a certain metadata tag (orientation) and if it is a certain value, rotate that image by a certain amount of degrees. I've read quite a lot of stuff about rotating images in Java, but I can't figure out how to get it working with ImageIO.

Any help would be greatly appreciated!

publicstatic ArrayList getTiffPages(byte[] argFileBytes,int imageNumber)throws Exception{

ArrayList<byte[]> tiffList =new ArrayList<byte[]>();

ByteArraySeekableStream bArrSeekStream =new ByteArraySeekableStream(argFileBytes);

ImageReadParam param =new ImageReadParam();

Iterator readers = ImageIO.getImageReadersByFormatName("tiff");

ImageReader reader = (ImageReader)readers.next();

ImageInputStream iis = ImageIO.createImageInputStream(bArrSeekStream);

reader.setInput(iis);

int noOfPages = reader.getNumImages(true);

for (int pageNbr = 0; pageNbr < noOfPages; pageNbr++){

ByteArrayOutputStream baos =new ByteArrayOutputStream();

IIOImage currentImage = reader.readAll(pageNbr, param);

ImageOutputStream ios = ImageIO.createImageOutputStream(baos);

Iterator writers = ImageIO.getImageWritersByFormatName("tiff");

ImageWriter writer = (ImageWriter)writers.next();

writer.setOutput(ios);

IIOMetadata streamMetadata = writer.getDefaultStreamMetadata(null);

String tiffMetadataFormatName = streamMetadata.getNativeMetadataFormatName();

IIOMetadataNode newTree =new IIOMetadataNode(tiffMetadataFormatName);

IIOMetadataNode byteOrderNode =new IIOMetadataNode("ByteOrder");

byteOrderNode.setAttribute("value","LITTLE_ENDIAN");

newTree.appendChild(byteOrderNode);

streamMetadata.setFromTree(tiffMetadataFormatName, newTree);

writer.write(streamMetadata, currentImage,null);

writer.dispose();

ios.close();

if (pageNbr == 0){

SAXContentHandler.setFrontPageSize(String.valueOf(baos.size()));

}elseif (pageNbr == 1){

SAXContentHandler.setBackPageSize(String.valueOf(baos.size()));

}

//System.out.println("BAOS Size: " + baos.size());

tiffList.add(baos.toByteArray());

baos.flush();

baos.close();

}

return tiffList;

[3677 byte] By [patricknza] at [2007-11-27 0:38:17]
# 1

I've managed to solve this problem myself, and thought I'd post how I did it, incase there is anyone else out there with these types of problems.

Basically I'm using the TIFFDirectory and TIFFField classes to read the image metadata, then if the tag is a certain value passing a BufferedImage I've pulled out of the image to the AffineTransform class.

If anyone wants any more details, please let me know.

patricknza at 2007-7-11 22:49:09 > top of Java-index,Security,Cryptography...
# 2
Hi patricknz ,.I want to display tiff image in browser.Also i want to performed some image operation like zoom in, zoom out, rotate by specific degree .Plz give me some sample progarm for this.Thanks in Advance.
AP_javaa at 2007-7-11 22:49:09 > top of Java-index,Security,Cryptography...
# 3
Hi patricknz ,.I want to display tiff image in browser.Also i want to performed some image operation like zoom in, zoom out, rotate by specific degree .Plz give me some sample progarm for this.Thanks in Advance.
AP_javaa at 2007-7-11 22:49:09 > top of Java-index,Security,Cryptography...