Search in sources :

Example 1 with NamedImageTransformer

use of com.adobe.acs.commons.images.NamedImageTransformer in project acs-aem-commons by Adobe-Consulting-Services.

the class NamedTransformImageServletTest method test_getImageTransformersWithParams.

@Test
public void test_getImageTransformersWithParams() {
    List<NamedImageTransformer> selectedNamedImageTransformers = new ArrayList<NamedImageTransformer>();
    selectedNamedImageTransformers.add(featureImageTransformer);
    selectedNamedImageTransformers.add(smallImageTransformer);
    final ValueMap imageTransformersWithParams = servlet.getImageTransformersWithParams(selectedNamedImageTransformers);
    assertEquals(IMAGE_TRANSFORM_RESIZE, imageTransformersWithParams.keySet().toArray()[0]);
    ValueMap resize = (ValueMap) imageTransformersWithParams.values().toArray()[0];
    assertEquals("width", resize.keySet().toArray()[0]);
    assertEquals("10", resize.values().toArray()[0]);
    assertEquals(1, resize.keySet().size());
    assertEquals(IMAGE_TRANSFORM_GREYSCALE, imageTransformersWithParams.keySet().toArray()[1]);
    ValueMap greyscale = (ValueMap) imageTransformersWithParams.values().toArray()[1];
    assertEquals("greyscale", greyscale.keySet().toArray()[0]);
    assertEquals("true", greyscale.values().toArray()[0]);
}
Also used : ValueMap(org.apache.sling.api.resource.ValueMap) NamedImageTransformer(com.adobe.acs.commons.images.NamedImageTransformer) Test(org.junit.Test)

Example 2 with NamedImageTransformer

use of com.adobe.acs.commons.images.NamedImageTransformer in project acs-aem-commons by Adobe-Consulting-Services.

the class NamedTransformImageServlet method doGet.

@Override
protected final void doGet(final SlingHttpServletRequest request, final SlingHttpServletResponse response) throws ServletException, IOException {
    // Get the transform names from the suffix
    final List<NamedImageTransformer> selectedNamedImageTransformers = getNamedImageTransformers(request);
    // Collect and combine the image transformers and their params
    final ValueMap imageTransformersWithParams = getImageTransformersWithParams(selectedNamedImageTransformers);
    final Image image = this.resolveImage(request);
    final String mimeType = this.getMimeType(request, image);
    Layer layer = this.getLayer(image);
    if (layer == null) {
        response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND);
        return;
    }
    // Transform the image
    layer = this.transform(layer, imageTransformersWithParams);
    // Get the quality
    final double quality = this.getQuality(mimeType, imageTransformersWithParams.get(TYPE_QUALITY, EMPTY_PARAMS));
    // Check if the image is a JPEG which has to be encoded progressively
    final boolean progressiveJpeg = isProgressiveJpeg(mimeType, imageTransformersWithParams.get(TYPE_PROGRESSIVE, EMPTY_PARAMS));
    response.setContentType(mimeType);
    if (progressiveJpeg) {
        ProgressiveJpeg.write(layer, quality, response.getOutputStream());
    } else {
        layer.write(mimeType, quality, response.getOutputStream());
    }
    response.flushBuffer();
}
Also used : ValueMap(org.apache.sling.api.resource.ValueMap) Image(com.day.cq.wcm.foundation.Image) Layer(com.day.image.Layer) NamedImageTransformer(com.adobe.acs.commons.images.NamedImageTransformer)

Example 3 with NamedImageTransformer

use of com.adobe.acs.commons.images.NamedImageTransformer in project acs-aem-commons by Adobe-Consulting-Services.

the class NamedTransformImageServletTest method test_multipleTransforms.

@Test
public void test_multipleTransforms() throws Exception {
    List<NamedImageTransformer> selectedNamedImageTransformers = new ArrayList<NamedImageTransformer>();
    selectedNamedImageTransformers.add(featureImageTransformer);
    selectedNamedImageTransformers.add(smallImageTransformer);
    final ValueMap imageTransformersWithParams = servlet.getImageTransformersWithParams(selectedNamedImageTransformers);
    servlet.transform(mock(Layer.class), imageTransformersWithParams);
    org.mockito.Mockito.verify(resizeImageTransformer, times(1)).transform(any(Layer.class), any(ValueMap.class));
    org.mockito.Mockito.verify(greyscaleImageTransformer, times(1)).transform(any(Layer.class), any(ValueMap.class));
}
Also used : ValueMap(org.apache.sling.api.resource.ValueMap) Layer(com.day.image.Layer) NamedImageTransformer(com.adobe.acs.commons.images.NamedImageTransformer) Test(org.junit.Test)

Example 4 with NamedImageTransformer

use of com.adobe.acs.commons.images.NamedImageTransformer in project acs-aem-commons by Adobe-Consulting-Services.

the class NamedTransformImageServlet method getNamedImageTransformers.

/**
 * Gets the NamedImageTransformers based on the Suffix segments in order.
 *
 * @param request the SlingHttpServletRequest object
 * @return a list of the NamedImageTransformers specified by the HTTP Request suffix segments
 */
protected final List<NamedImageTransformer> getNamedImageTransformers(final SlingHttpServletRequest request) {
    final List<NamedImageTransformer> transformers = new ArrayList<NamedImageTransformer>();
    String[] suffixes = PathInfoUtil.getSuffixSegments(request);
    if (suffixes.length < 2) {
        log.warn("Named Transform Image Servlet requires at least one named transform");
        return transformers;
    }
    int endIndex = suffixes.length - 1;
    // Its OK to check; the above check ensures there are 2+ segments
    if (StringUtils.isNumeric(PathInfoUtil.getSuffixSegment(request, suffixes.length - 2))) {
        endIndex--;
    }
    suffixes = (String[]) ArrayUtils.subarray(suffixes, 0, endIndex);
    for (final String transformerName : suffixes) {
        final NamedImageTransformer transformer = this.namedImageTransformers.get(transformerName);
        if (transformer != null) {
            transformers.add(transformer);
        }
    }
    return transformers;
}
Also used : ArrayList(java.util.ArrayList) NamedImageTransformer(com.adobe.acs.commons.images.NamedImageTransformer)

Aggregations

NamedImageTransformer (com.adobe.acs.commons.images.NamedImageTransformer)4 ValueMap (org.apache.sling.api.resource.ValueMap)3 Layer (com.day.image.Layer)2 Test (org.junit.Test)2 Image (com.day.cq.wcm.foundation.Image)1 ArrayList (java.util.ArrayList)1