package webraveler.plugin; import java.util.*; import java.io.*; import webraveler.http.HTTPResponse; import webraveler.ravel.PluginCallbackException; import com.sun.image.codec.jpeg.*; import java.awt.*; import java.awt.image.*; /** * */ public class ImageDegradationPlugin extends webraveler.ravel.RavelerPlugin { /* variables */ private HTTPResponse response; private boolean DEBUG = false; /*constructors*/ public ImageDegradationPlugin () throws Exception{ name = "ImageDegradationPlugin"; mimeTypes.add("image/gif"); mimeTypes.add("image/jpeg"); mimeTypes.add("image/png"); } /*methods*/ public void setDefaultAttributes () { attributes = new Hashtable(); name = "ImageDegradationPlugin"; } public boolean initialize () { return true; }//initialize() public HTTPResponse execute (HTTPResponse response, Hashtable attributes) throws PluginCallbackException { if (DEBUG) System.out.println("ImageDegradationPlugin: executing on response..."); byte[] imageBytes = response.entityBytes; try { Image image = Toolkit.getDefaultToolkit().createImage(imageBytes); MediaTracker mediaTracker = new MediaTracker(new Container()); mediaTracker.addImage(image, 0); mediaTracker.waitForID(0); BufferedImage thumbImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = thumbImage.createGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), null); ByteArrayOutputStream out = new ByteArrayOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder. getDefaultJPEGEncodeParam(thumbImage); int quality = 10; quality = Math.max(0, Math.min(quality, 100)); param.setQuality((float)quality / 100.0f, false); encoder.setJPEGEncodeParam(param); encoder.encode(thumbImage); imageBytes = out.toByteArray(); response.entityBytes = imageBytes; } catch ( Exception e ) { if( DEBUG ) System.out.println("ImageDegradationPlugin: Failed to degrade this image!"); return response; } response.deleteHeader("content-length"); response.setHeader("content-length", new String(""+response.entityBytes.length)); response.deleteHeader("content-type"); response.setHeader("content-type", "image/jpeg"); response.protocolVersion = "HTTP/1.0"; response.status = 200; response.reasonPhrase = "OK"; response.htmlPage = null; response.deleteHeader("connection"); response.setHeader("connection", new String("close")); throw new PluginCallbackException(response); } //execute(HTTPResponse) public void terminate() { } // terminate() }//InsertAtTop