@Override protected void writeLayer( SlingHttpServletRequest req, SlingHttpServletResponse resp, ImageContext c, Layer layer) throws IOException, RepositoryException { Image image = new Image(c.resource); if (!image.hasContent()) { resp.sendError(HttpServletResponse.SC_NOT_FOUND); return; } // get style and set constraints image.loadStyleData(c.style); // get pure layer layer = image.getLayer(false, false, false); boolean modified = false; if (layer != null) { // crop modified = image.crop(layer) != null; // rotate modified |= image.rotate(layer) != null; // resize modified |= image.resize(layer) != null; // apply diff if needed (because we create the layer inline) modified |= applyDiff(layer, c); } // don't cache images on authoring instances // Cache-Control: no-cache allows caching (e.g. in the browser cache) but // will force revalidation using If-Modified-Since or If-None-Match every time, // avoiding aggressive browser caching if (!WCMMode.DISABLED.equals(WCMMode.fromRequest(req))) { resp.setHeader("Cache-Control", "no-cache"); } if (modified) { String mimeType = image.getMimeType(); if (ImageHelper.getExtensionFromType(mimeType) == null) { // get default mime type mimeType = "image/png"; } resp.setContentType(mimeType); layer.write(mimeType, mimeType.equals("image/gif") ? 255 : 1.0, resp.getOutputStream()); } else { // do not re-encode layer, just spool Property data = image.getData(); InputStream in = data.getStream(); resp.setContentLength((int) data.getLength()); resp.setContentType(image.getMimeType()); IOUtils.copy(in, resp.getOutputStream()); in.close(); } resp.flushBuffer(); }
public BufferedImage getImage(final Rendition rendition) throws IOException { ExtractedMetadata metadata = extractMetadata(rendition.getAsset()); String text = (String) metadata.getMetaDataProperty("Content"); if (text != null && text.length() > 0) { // create text layer final Layer layer = new Layer(500, 600, Color.WHITE); layer.setPaint(Color.black); Font font = new Font("Arial", 12); String displayText = getDisplayText(text, 600, 12); layer.drawText(10, 10, 500, 600, displayText, font, Font.ALIGN_LEFT, 0, 0); layer.crop(new Rectangle(510, 600)); return layer.getImage(); } else { return null; } }