package org.emile.cirilo.business; import javax.imageio.IIOImage; import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageWriteParam; import javax.imageio.metadata.IIOMetadata; import javax.media.jai.*; import org.apache.log4j.Logger; import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam; import com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter; import com.sun.media.jai.codec.TIFFEncodeParam; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; public class PTIFConverter { private static Logger log = Logger.getLogger(PTIFConverter.class); private static final RenderingHints RH_BORDER_REFLECT = new RenderingHints(JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance(BorderExtender.BORDER_REFLECT)); public static void pyramidGenerator(TIFFImageWriter writer, BufferedImage aInputImage, int tileWidth, int tileHeight) { try { TIFFEncodeParam tep = new TIFFEncodeParam(); tep.setWriteTiled(true); tep.setTileSize(tileWidth,tileHeight); TIFFImageWriteParam param = (TIFFImageWriteParam) writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType("ZLib"); param.setCompressionQuality(0.7f); // param.setCompressionType("JPEG"); // param.setCompressionType("LZW"); param.setTilingMode(ImageWriteParam.MODE_EXPLICIT); param.setTiling(tileWidth, tileHeight, 0, 0); RenderedImage renderedImg = aInputImage; IIOMetadata metadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(renderedImg), param); writer.prepareWriteSequence(metadata); writer.writeToSequence(new IIOImage(renderedImg, null, metadata), param); writer.endWriteSequence(); } catch (Exception e) { log.error(e.getLocalizedMessage(),e); } } }