package com.cosmocode.image.filtering; import java.io.InputStream; import java.io.OutputStream; import java.util.Vector; import javax.media.jai.RenderedOp; import javax.media.jai.operator.BorderDescriptor; import javax.media.jai.operator.CropDescriptor; import javax.media.jai.operator.EncodeDescriptor; import javax.media.jai.operator.FileStoreDescriptor; import javax.media.jai.operator.InvertDescriptor; import javax.media.jai.operator.RescaleDescriptor; import javax.media.jai.operator.RotateDescriptor; import javax.media.jai.operator.ScaleDescriptor; import javax.media.jai.operator.StreamDescriptor; import javax.media.jai.operator.URLDescriptor; import com.cosmocode.image.filtering.filters.BorderImageFilter; import com.cosmocode.image.filtering.filters.BrightnessFilter; import com.cosmocode.image.filtering.filters.CropImageFilter; import com.cosmocode.image.filtering.filters.InvertImageFilter; import com.cosmocode.image.filtering.filters.RotateImageFilter; import com.cosmocode.image.filtering.filters.ScaleImageFilter; import com.sun.media.jai.codec.BMPEncodeParam; import com.sun.media.jai.codec.FileCacheSeekableStream; import com.sun.media.jai.codec.FileSeekableStream; import com.sun.media.jai.codec.ImageEncodeParam; import com.sun.media.jai.codec.JPEGEncodeParam; import com.sun.media.jai.codec.PNMEncodeParam; import com.sun.media.jai.codec.TIFFEncodeParam; /** * * @version $Id: JAIImageFiltering.java,v 1.7 2006/05/30 15:27:26 rademacher Exp $ */ public class JAIImageFiltering implements ImageFiltering { public static final String cvsID = "$Id: JAIImageFiltering.java,v 1.7 2006/05/30 15:27:26 rademacher Exp $"; private RenderedOp ro ; private Vector<ImageFilter> v = new Vector<ImageFilter>() ; private float quality = 1.0f ; public JAIImageFiltering ( InputStream in ) throws Exception { ro = StreamDescriptor.create( new FileCacheSeekableStream( in ), null,null ) ; } public JAIImageFiltering ( java.net.URL location ) throws Exception { ro = URLDescriptor.create( location, null, null ); } public JAIImageFiltering( String filename ) throws Exception { ro = StreamDescriptor.create( new FileSeekableStream( filename ), null,null ) ; } /** returns an RenderedOp. for more details see * http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/RenderedOp.html */ public static RenderedOp getRenderedOp( InputStream in ) throws Exception { return StreamDescriptor.create( new FileCacheSeekableStream( in ), null,null ) ; } /** returns an RenderedOp. for more details see * http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/RenderedOp.html */ public static RenderedOp getRenderedOp( java.net.URL location ) throws Exception { return URLDescriptor.create( location, null, null ); } /** returns an RenderedOp. for more details see * http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/RenderedOp.html */ public static RenderedOp getRenderedOp( String filename ) throws Exception { return StreamDescriptor.create( new FileSeekableStream( filename ), null,null ) ; } /** returns an RenderedOp. for more details see * http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/RenderedOp.html */ public RenderedOp getRenderedOp() { return ro ; } public int getWidth() { if ( ro == null ) return -1 ; return ro.getWidth() ; } public int getHeight() { if ( ro == null ) return -1 ; return ro.getHeight() ; } public void addFilter( ImageFilter filter ) { v.addElement( filter ) ; } public void setQuality( float quality ) { this.quality = quality ; } public void proceedFilters() { for (int i=0;i<v.size();i++) { ImageFilter filter = (ImageFilter)v.elementAt(i) ; if ( filter instanceof ScaleImageFilter ) { ro = ScaleDescriptor.create( ro, new Float( ((ScaleImageFilter)filter).getXScale() ), new Float( ((ScaleImageFilter)filter).getYScale()), new Float(0),new Float(0),null,null); } else if ( filter instanceof RotateImageFilter ) { ro = RotateDescriptor.create( ro, new Float( ro.getWidth()/2 ) , new Float( ro.getHeight()/2 ) , new Float( ((RotateImageFilter)filter).getRadians()), null,null,null ); } else if ( filter instanceof BorderImageFilter ) { ro = BorderDescriptor.create( ro, new Integer( ((BorderImageFilter)filter).getWidth() ), new Integer(((BorderImageFilter)filter).getWidth()), new Integer(((BorderImageFilter)filter).getWidth()), new Integer(((BorderImageFilter)filter).getWidth()), null, null ); } else if ( filter instanceof CropImageFilter ) { ro = CropDescriptor.create( ro, new Float(((CropImageFilter)filter).getX() ), new Float(((CropImageFilter)filter).getY()), new Float(((CropImageFilter)filter).getWidth()), new Float(((CropImageFilter)filter).getHeight()), null) ; } else if ( filter instanceof InvertImageFilter ) { ro = InvertDescriptor.create( ro,null ); } else if ( filter instanceof BrightnessFilter ) { double[] c = { ((BrightnessFilter)filter).getBrightness() } ; double[] o = { 0.0f } ; ro = RescaleDescriptor.create( ro, c, o, null ); } } } public boolean writeToFile( String filename ) { if ( ro == null ) return false; FileStoreDescriptor.create( ro , filename , null ,null,null,null); return true ; } public boolean writeToStream( OutputStream out ) { return writeToStream( out, null ); } /** format can be * png * pnm * tiff * bmp * jpeg */ public boolean writeToStream( java.io.OutputStream out, String format ) { if ( ro == null ) return false ; if ( format == null ) format=""; ImageEncodeParam iep = null ; if ( format.toLowerCase().equals("png") ) { iep = null ; } else if ( format.toLowerCase().equals("pnm") ) { iep = new PNMEncodeParam() ; } else if ( format.toLowerCase().equals("tiff") ) { iep = new TIFFEncodeParam() ; } else if ( format.toLowerCase().equals("bmp") ) { iep = new BMPEncodeParam() ; } else if ( format.toLowerCase().equals("jpeg") ) { iep = new JPEGEncodeParam( ) ; ((JPEGEncodeParam)iep).setQuality( quality ); } else format = null ; EncodeDescriptor.create( ro, out, format , iep, null ); return true ; } } // end class JAIImageFiltering ////////////////////////////////////////////////////////////////////////////////// // // $Log: JAIImageFiltering.java,v $ // Revision 1.7 2006/05/30 15:27:26 rademacher // 0.7.0.0 // // Revision 1.6 2005/10/21 10:04:05 rademacher // 0.6.0.0 // // Revision 1.5 2005/05/13 12:32:45 rademacher // 0.5.0.0 // // Revision 1.4 2005/01/07 11:54:21 rademacher // 0.3.1.0 // // Revision 1.3 2004/02/23 11:57:41 rademacher // 0.1.0.0 // // Revision 1.2 2004/02/20 08:36:29 rademacher // 0.0.0.1 // // Revision 1.1.1.1 2004/02/19 14:37:31 rademacher // // // //