protected ImageOutputter getOutputter() { Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(getOriginalFormatName()); if (writers.hasNext()) { ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam(); if (getOriginalFormatName().equals("jpeg")) { param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(config.getJpegCompression()); } return new ImageIOOutputter(writer, param); } return new SanselanOutputter(FORMAT_NAME_TO_IMAGE_FORMAT.get(getOriginalFormatName())); }
public byte[] toBytes(BufferedImage image) throws IOException { if (baos == null) { baos = new ByteArrayOutputStream(); } else { baos.reset(); } writer.setOutput(ImageIO.createImageOutputStream(baos)); // Create a new empty metadata set ImageWriteParam metaImageWriteParam = writeParam; if (writer instanceof JPEGImageWriter) { // There is an issue in the javax code because of which function call // writer.getDefaultImageMetadata(new ImageTypeSpecifier(image.getColorModel(), // image.getSampleModel()), writeParam); // // does buggy processing for compression ratio parameter in ImageWriteParam. // Hence passing null as ImageWriteParam here to ignore this processing and // passing the ImageWriteParam later in the writer.write() call. metaImageWriteParam = null; } IIOMetadata metadata = writer.getDefaultImageMetadata( new ImageTypeSpecifier(image.getColorModel(), image.getSampleModel()), metaImageWriteParam); if (jpegSamplingMode.getModeValue() > 0 && writer instanceof JPEGImageWriter) { setJpegSubsamplingMode(metadata); } writer.write(null, new IIOImage(image, Collections.<BufferedImage>emptyList(), metadata), metaImageWriteParam == null ? writeParam : null); return baos.toByteArray(); }
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(config.getJpegCompression()); outputter = new ImageIOOutputter(writer, param); write(rgbOnlyImage);
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(config.getJpegCompression()); outputter = new ImageIOOutputter(writer, param); write(rgbOnlyImage);
protected ImageOutputter getOutputter() { Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(getOriginalFormatName()); if (writers.hasNext()) { ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam(); if (getOriginalFormatName().equals("jpeg")) { param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(config.getJpegCompression()); if (param instanceof JPEGImageWriteParam) { ((JPEGImageWriteParam) param).setOptimizeHuffmanTables( config.getJpegHuffmanOptimization()); } } JpegImageUtils.SamplingModes samplingMode = JpegImageUtils.SamplingModes.DEFAULT; if (config.getJpegRetainSubsampling() && sourceImageParams != null) { samplingMode = sourceImageParams.getSamplingMode(); } return new ImageIOOutputter(writer, param, samplingMode); } return new SanselanOutputter(FORMAT_NAME_TO_IMAGE_FORMAT.get(getOriginalFormatName())); }
/** * As the image is resized, the request needs to change so that the optimizer can * make sensible image size-related decisions down the pipeline. GIF images are rewritten * as PNGs though, so as not to include the dependency on the GIF decoder. * * @param response the base response that will be modified with the resized image * @param image the resized image that needs to be substituted for the original image from * the response */ private void updateResponse(HttpResponseBuilder response, BufferedImage image) throws IOException { ImageWriter imageWriter = ImageIO.getImageWritersByFormatName(RESIZE_OUTPUT_FORMAT).next(); ImageOutputter outputter = new ImageIOOutputter(imageWriter, null); byte[] imageBytes = outputter.toBytes(image); response .setResponse(imageBytes) .setHeader(CONTENT_TYPE, CONTENT_TYPE_IMAGE_PNG) .setHeader(CONTENT_LENGTH, String.valueOf(imageBytes.length)); }
/** * As the image is resized, the request needs to change so that the optimizer can * make sensible image size-related decisions down the pipeline. GIF images are rewritten * as PNGs though, so as not to include the dependency on the GIF decoder. * * @param response the base response that will be modified with the resized image * @param image the resized image that needs to be substituted for the original image from * the response */ private void updateResponse(HttpResponseBuilder response, BufferedImage image) throws IOException { ImageWriter imageWriter = ImageIO.getImageWritersByFormatName(RESIZE_OUTPUT_FORMAT).next(); ImageOutputter outputter = new ImageIOOutputter(imageWriter, null); byte[] imageBytes = outputter.toBytes(image); response .setResponse(imageBytes) .setHeader(CONTENT_TYPE, CONTENT_TYPE_IMAGE_PNG) .setHeader(CONTENT_LENGTH, String.valueOf(imageBytes.length)); }
/** * If the image is resized, the request needs to change so that the optimizer can * make sensible image size-related decisions down the pipeline. GIF images are rewritten * as PNGs though, so as not to include the dependency on the GIF decoder. * * @param response the base response that will be modified with the resized image * @param image the resized image that needs to be substituted for the original image from * the response */ public void updateResponse(HttpResponseBuilder response, BufferedImage image) throws IOException { ImageWriter imageWriter = ImageIO.getImageWritersByFormatName(RESIZE_OUTPUT_FORMAT).next(); ImageOutputter outputter = new ImageIOOutputter(imageWriter, null); byte[] imageBytes = outputter.toBytes(image); response .setResponse(imageBytes) .setHeader(CONTENT_TYPE, CONTENT_TYPE_IMAGE_PNG) .setHeader(CONTENT_LENGTH, String.valueOf(imageBytes.length)); }
@Override protected void rewriteImpl(BufferedImage image) throws IOException { if (!ImageUtils.isOpaque(image)) { // We can rewrite transparent GIFs to PNG but for IE6 it requires the use of // the AlphaImageReader and some pain. Deferring this until that is proven to work // Write to strip any metadata and re-compute the palette. We allow arbitrary large palettes // here as if the image is already in a direct color model it will already have been // constrained by the max in-mem constraint. write(ImageUtils.palettize(image, Integer.MAX_VALUE)); } else { usePng = true; outputter = new ImageIOOutputter(ImageIO.getImageWritersByFormatName("png").next(), null); super.rewriteImpl(image); } }
@Override protected void rewriteImpl(BufferedImage image) throws IOException { if (!ImageUtils.isOpaque(image)) { // We can rewrite transparent GIFs to PNG but for IE6 it requires the use of // the AlphaImageReader and some pain. Deferring this until that is proven to work // Write to strip any metadata and re-compute the palette. We allow arbitrary large palettes // here as if the image is already in a direct color model it will already have been // constrained by the max in-mem constraint. write(ImageUtils.palettize(image, Integer.MAX_VALUE)); } else { usePng = true; outputter = new ImageIOOutputter(ImageIO.getImageWritersByFormatName("png").next(), null); super.rewriteImpl(image); } }
@Override protected void rewriteImpl(BufferedImage image) throws IOException { if (!ImageUtils.isOpaque(image)) { // We can rewrite transparent GIFs to PNG but for IE6 it requires the use of // the AlphaImageReader and some pain. Deferring this until that is proven to work // Write to strip any metadata and re-compute the palette. We allow arbitrary large palettes // here as if the image is already in a direct color model it will already have been // constrained by the max in-mem constraint. write(ImageUtils.palettize(image, Integer.MAX_VALUE)); } else { usePng = true; outputter = new ImageIOOutputter(ImageIO.getImageWritersByFormatName("png").next(), null); super.rewriteImpl(image); } }
public BMPOptimizer(OptimizerConfig config, HttpResponseBuilder response) { super(config, response); ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next(); outputter = new ImageIOOutputter(writer, null); }
public BMPOptimizer(OptimizerConfig config, HttpResponseBuilder response) { super(config, response); ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next(); outputter = new ImageIOOutputter(writer, null); }
public BMPOptimizer(OptimizerConfig config, HttpResponseBuilder response) { super(config, response); ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next(); outputter = new ImageIOOutputter(writer, null); }
protected ImageOutputter getOutputter() { Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(getOriginalFormatName()); if (writers.hasNext()) { ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam(); if (getOriginalFormatName().equals("jpeg")) { param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(config.getJpegCompression()); } return new ImageIOOutputter(writer, param); } return new SanselanOutputter(FORMAT_NAME_TO_IMAGE_FORMAT.get(getOriginalFormatName())); }