If you want to use a selector you will need to create a servlet for it that extends the AbstractImageServlet. You would start out with something like this:
@Component
@Service
@Properties({
@Property(name="sling.servlet.resourceTypes", value="sling/servlet/default"),
@Property(name="sling.servlet.selectors", value="resize"),
@Property(name="sling.servlet.extensions", value={"jpg", "png", "gif"}),
@Property(name="sling.servlet.methods", value="GET")
})
public class ImageResizeServlet extends AbstractImageServlet {
//... code.
}
sling.servlet.selectors would be the selector name you would want to set. For example:
//in the servlet
@Property(name="sling.servlet.selectors", value="resize")
//in the jsp
image.setSelector("resize");
Within your class, you would want to override the writeLayer method. Something like this:
@Override
protected void writeLayer(SlingHttpServletRequest req,
SlingHttpServletResponse resp,
AbstractImageServlet.ImageContext c, Layer layer)
throws IOException, RepositoryException {
// set new width and height
int width = 100;
int height = 100;
Image image = new Image(c.resource);
if (!image.hasContent() || width == 0) {
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
// get style and set constraints
image.loadStyleData(c.style);
// get pure layer
layer = image.getLayer(true, true, true);
Layer newLayer = ImageHelper.resize(layer, new Dimension(width, 0), null, null);
if (newLayer != null) {
layer = newLayer;
}
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());
resp.flushBuffer();
}
In our custom solution we handled everything in the writeLayer method and not the createLayer method. So we overwrote createLayer.
@Override
protected Layer createLayer(AbstractImageServlet.ImageContext c)
throws RepositoryException, IOException {
// don't create the layer yet. handle everything later
return null;
}
We also overwrote createImageResource
/**
* {@inheritDoc}
*
* Override default ImageResource creation to support assets
*/
@Override
protected ImageResource createImageResource(Resource resource) {
return new Image(resource);
}
Hope that helps.