/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.ppio; import java.awt.image.RenderedImage; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.geoserver.wps.WPSException; import com.sun.media.jai.codec.ImageDecoder; import com.sun.media.jai.codec.ImageEncoder; import com.sun.media.jai.codecimpl.JPEGImageDecoder; import com.sun.media.jai.codecimpl.JPEGImageEncoder; import com.sun.media.jai.codecimpl.PNGImageDecoder; import com.sun.media.jai.codecimpl.PNGImageEncoder; public abstract class ImagePPIO extends BinaryPPIO { protected ImagePPIO(final String mimeType) { super(RenderedImage.class, RenderedImage.class, mimeType); } public abstract ImageEncoder getEncoder(OutputStream os); public abstract ImageDecoder getDecoder(InputStream os); @Override public void encode(Object value, OutputStream outputStream) throws Exception { RenderedImage renderedImage = (RenderedImage) value; ImageEncoder encoder = getEncoder(outputStream); encoder.encode(renderedImage); } @Override public Object decode(InputStream inputStream) throws Exception { ImageDecoder decoder = getDecoder(inputStream); RenderedImage ri = null; try { ri = decoder.decodeAsRenderedImage(); } catch (IOException ioe){ WPSException wpse = new WPSException("Unable to decode the image. Expected an image having mimetype = " + mimeType); wpse.initCause(ioe); throw wpse; } return ri; } public static class PNGPPIO extends ImagePPIO { public PNGPPIO() { super("image/png"); } @Override public final ImageEncoder getEncoder(OutputStream outputStream) { return new PNGImageEncoder(outputStream, null); } @Override public final ImageDecoder getDecoder(InputStream inputStream) { return new PNGImageDecoder(inputStream, null); } @Override public String getFileExtension() { return "png"; } } public static class JPEGPPIO extends ImagePPIO { public JPEGPPIO() { super("image/jpeg"); } @Override public final ImageDecoder getDecoder(InputStream inputStream) { return new JPEGImageDecoder(inputStream, null); } @Override public ImageEncoder getEncoder(OutputStream outputStream){ return new JPEGImageEncoder(outputStream, null); } @Override public String getFileExtension() { return "jpeg"; } } }