/* (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.wms.map;
import java.awt.image.RenderedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.geoserver.wms.RasterCleaner;
import org.geoserver.wms.MapProducerCapabilities;
import org.geoserver.wms.WMS;
import org.geoserver.wms.WMSMapContent;
import org.geotools.image.ImageWorker;
import com.sun.media.imageioimpl.common.PackageUtil;
/**
* Map response handler for JPEG image format.
*
* @author Simone Giannecchini
* @since 1.4.x
*
*/
public final class JPEGMapResponse extends RenderedImageMapResponse {
/** Logger. */
private final static Logger LOGGER = org.geotools.util.logging.Logging
.getLogger(JPEGMapResponse.class.toString());
private static final boolean CODEC_LIB_AVAILABLE = PackageUtil.isCodecLibAvailable();
/**
* Default capabilities for JPEG .
*
* <p>
* <ol>
* <li>tiled = supported</li>
* <li>multipleValues = unsupported</li>
* <li>paletteSupported = false</li>
* <li>transparency = false</li>
* </ol>
*
* <p>
* We should soon support multipage tiff.
*/
private static MapProducerCapabilities CAPABILITIES= new MapProducerCapabilities(true, false, false, false, null);
/** the only MIME type this map producer supports */
private static final String MIME_TYPE = "image/jpeg";
public JPEGMapResponse(WMS wms) {
super(MIME_TYPE, wms);
}
@Override
public void formatImageOutputStream(RenderedImage image, OutputStream outStream,
WMSMapContent mapContent) throws IOException {
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine("About to write a JPEG image.");
}
boolean JPEGNativeAcc = wms.getJPEGNativeAcceleration() && CODEC_LIB_AVAILABLE;
float quality = (100 - wms.getJpegCompression()) / 100.0f;
ImageWorker iw = new ImageWorker(image);
iw.writeJPEG(outStream, "JPEG", quality, JPEGNativeAcc);
RasterCleaner.addImage(iw.getRenderedImage());
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine("Writing a JPEG done!!!");
}
}
@Override
public MapProducerCapabilities getCapabilities(String outputFormat) {
return CAPABILITIES;
}
}