/* * $Id$ * * Copyright 2008 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.logic; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import ome.api.local.LocalCompress; public class CompressImpl implements LocalCompress { /** The default compression quality in fractional percent. */ private float quality = 0.85F; /* (non-Javadoc) * @see ome.api.ICompress#compressToStream(java.awt.image.BufferedImage, java.io.OutputStream) */ public void compressToStream(BufferedImage image, OutputStream outputStream) throws IOException { // Get a JPEG image writer ImageWriter jpegWriter = ImageIO.getImageWritersByFormatName("jpeg").next(); // Setup the compression value from (0.05, 0.75 and 0.95) ImageWriteParam iwp = jpegWriter.getDefaultWriteParam(); iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); iwp.setCompressionQuality(quality); // Write the JPEG to our ByteArray stream ImageOutputStream imageOutputStream = null; try { imageOutputStream = ImageIO.createImageOutputStream(outputStream); jpegWriter.setOutput(imageOutputStream); jpegWriter.write(null, new IIOImage(image, null, null), iwp); } finally { if (imageOutputStream != null) imageOutputStream.close(); } } /* (non-Javadoc) * @see ome.api.ICompress#setCompressionLevel(float) */ public void setCompressionLevel(float percentage) { quality = percentage; } /* (non-Javadoc) * @see ome.api.ICompress#getCompressionLevel() */ public float getCompressionLevel() { return quality; } }