@Override public String getMimeType(Object value, Operation operation) throws ServiceException { RenderedImageMap map = ((RenderedImageMap) value); return JpegOrPngChooser.getFromMap(map).getMime(); }
@Override public String getExtension(RenderedImage image, WMSMapContent mapContent) { JpegOrPngChooser chooser = JpegOrPngChooser.getFromMapContent(image, mapContent); if (chooser.isJpegPreferred()) { return "jpg"; } else { return "png"; } } }
public JpegOrPngChooser(RenderedImage image) { this.jpegPreferred = isBestFormatJpeg(image); }
private void assertPng(RenderedImage image) { JpegOrPngChooser chooser = new JpegOrPngChooser(image); assertFalse(chooser.isJpegPreferred()); assertEquals("image/png", chooser.getMime()); assertEquals("png", chooser.getExtension()); }
/** * Returns the chooser from the map content, eventually creating it if missing * * @param image * @param ctx * @return */ public static JpegOrPngChooser getFromMapContent(RenderedImage image, WMSMapContent ctx) { JpegOrPngChooser chooser = (JpegOrPngChooser) ctx.getMetadata().get(JPEG_PNG_CHOOSER); if (chooser == null) { chooser = new JpegOrPngChooser(image); ctx.getMetadata().put(JPEG_PNG_CHOOSER, chooser); } return chooser; }
public static JpegOrPngChooser getFromMap(RenderedImageMap map) { WMSMapContent ctx = map.getMapContext(); return getFromMapContent(map.getImage(), ctx); }
private void assertJpeg(RenderedImage image) { JpegOrPngChooser chooser = new JpegOrPngChooser(image); assertTrue(chooser.isJpegPreferred()); assertEquals("image/jpeg", chooser.getMime()); assertEquals("jpeg", chooser.getExtension()); } }
@Override public String getPreferredDisposition(Object value, Operation operation) { RenderedImageMap map = ((RenderedImageMap) value); String extension = JpegOrPngChooser.getFromMap(map).getMime(); return map.getSimpleAttachmentFileName() + "." + extension; }
/** * Transforms the rendered image into the appropriate format, streaming to the output stream. * * @see RasterMapOutputFormat#formatImageOutputStream(RenderedImage, OutputStream) */ @Override public void formatImageOutputStream( RenderedImage image, OutputStream outStream, WMSMapContent mapContent) throws ServiceException, IOException { JpegOrPngChooser chooser = JpegOrPngChooser.getFromMapContent(image, mapContent); if (chooser.isJpegPreferred()) { jpegResponse.formatImageOutputStream(image, outStream, mapContent); } else { pngResponse.formatImageOutputStream(image, outStream, mapContent); } }