Search in sources :

Example 6 with Layer

use of com.day.image.Layer in project acs-aem-commons by Adobe-Consulting-Services.

the class AddWatermarkToRenditionProcess method processLayer.

@Override
protected Layer processLayer(Layer layer, Rendition rendition, WorkflowSession workflowSession, String[] args) {
    final String watermarkPath = workflowHelper.getValuesFromArgs(ARG_WATERMARK, args).size() > 0 ? workflowHelper.getValuesFromArgs(ARG_WATERMARK, args).get(0) : null;
    if (watermarkPath != null) {
        Layer watermark = null;
        try {
            watermark = getLayer(watermarkPath, workflowSession);
            if (watermark != null) {
                addWatermark(layer, watermark);
            }
        } catch (LoginException e) {
            log.error("Unable to log into repository.", e);
        } finally {
            if (watermark != null) {
                watermark.dispose();
                watermark = null;
            }
        }
    } else {
        log.info("No watermark specified. Skipping.");
    }
    return layer;
}
Also used : LoginException(org.apache.sling.api.resource.LoginException) Layer(com.day.image.Layer)

Example 7 with Layer

use of com.day.image.Layer in project acs-aem-commons by Adobe-Consulting-Services.

the class MatteRenditionProcess method processLayer.

@Override
protected Layer processLayer(Layer layer, Rendition rendition, WorkflowSession workflowSession, String[] args) {
    final String dimensions = workflowHelper.getValuesFromArgs("dimension", args).size() > 0 ? workflowHelper.getValuesFromArgs("dimension", args).get(0) : null;
    final String backgroundColor = workflowHelper.getValuesFromArgs("bgcolor", args).size() > 0 ? workflowHelper.getValuesFromArgs("bgcolor", args).get(0) : null;
    final String verticalPositionArgument = workflowHelper.getValuesFromArgs("vpos", args).size() > 0 ? workflowHelper.getValuesFromArgs("vpos", args).get(0) : null;
    final String horizontalPositionArgument = workflowHelper.getValuesFromArgs("hpos", args).size() > 0 ? workflowHelper.getValuesFromArgs("hpos", args).get(0) : null;
    if (dimensions != null && backgroundColor != null) {
        int width = getDimension(dimensions)[0];
        int height = getDimension(dimensions)[1];
        if (layer.getHeight() == height && layer.getWidth() == width) {
            return layer;
        }
        Color matteColor = parseColor(backgroundColor, Color.BLACK);
        Layer newLayer = new Layer(width, height, matteColor);
        newLayer.setMimeType(rendition.getMimeType());
        int topAnchor;
        int leftAnchor;
        VerticalPosition vpos = VerticalPosition.valueOf(verticalPositionArgument);
        switch(vpos) {
            case bottom:
                topAnchor = newLayer.getHeight() - layer.getHeight();
                break;
            case middle:
                topAnchor = (newLayer.getHeight() - layer.getHeight()) / 2;
                break;
            default:
                topAnchor = 0;
                break;
        }
        HoritzonalPosition hpos = HoritzonalPosition.valueOf(horizontalPositionArgument);
        switch(hpos) {
            case right:
                leftAnchor = newLayer.getWidth() - layer.getWidth();
                break;
            case center:
                leftAnchor = (newLayer.getWidth() - layer.getWidth()) / 2;
                break;
            default:
                leftAnchor = 0;
                break;
        }
        newLayer.blit(layer, leftAnchor, topAnchor, layer.getWidth(), layer.getHeight(), 0, 0);
        return newLayer;
    } else {
        log.info("No dimension or background color specified. Skipping");
        return layer;
    }
}
Also used : Color(java.awt.Color) Layer(com.day.image.Layer)

Example 8 with Layer

use of com.day.image.Layer 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 9 with Layer

use of com.day.image.Layer in project acs-aem-commons by Adobe-Consulting-Services.

the class MultiplyBlendImageTransformerImpl method transform.

@Override
public final Layer transform(final Layer layer, final ValueMap properties) {
    if (properties == null || properties.isEmpty()) {
        log.warn("Transform [ {} ] requires parameters.", TYPE);
        return layer;
    }
    log.debug("Transforming with [ {} ]", TYPE);
    float alpha = normalizeAlpha(properties.get(KEY_ALPHA, properties.get(KEY_ALPHA_ALIAS, 0.0)).floatValue());
    Color color = getColor(properties);
    Layer filter = new Layer(layer.getWidth(), layer.getHeight(), color);
    BufferedImage image = merge(layer.getImage(), filter.getImage(), alpha);
    Layer result = new Layer(image);
    return result;
}
Also used : Color(java.awt.Color) Layer(com.day.image.Layer) BufferedImage(java.awt.image.BufferedImage)

Example 10 with Layer

use of com.day.image.Layer in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class AdaptiveImageServletTest method testTransparentImage.

@Test
void testTransparentImage() throws IOException {
    Pair<MockSlingHttpServletRequest, MockSlingHttpServletResponse> requestResponsePair = prepareRequestResponsePair(IMAGE29_PATH, 1607501105000L, "coreimg.80.1500", "jpeg");
    MockSlingHttpServletRequest request = requestResponsePair.getLeft();
    MockSlingHttpServletResponse response = requestResponsePair.getRight();
    context.contentPolicyMapping(ImageImpl.RESOURCE_TYPE, Image.PN_DESIGN_ALLOWED_RENDITION_WIDTHS, new String[] { "1500" }, Image.PN_DESIGN_JPEG_QUALITY, 80);
    servlet.doGet(request, response);
    Assertions.assertEquals(HttpStatus.SC_OK, response.getStatus());
    Layer responseImage = new Layer(new ByteArrayInputStream(response.getOutput()));
    Assertions.assertEquals(1500, responseImage.getWidth());
    for (int x = 0; x < responseImage.getWidth(); x++) {
        for (int y = 0; y < responseImage.getHeight(); y++) {
            Assertions.assertEquals(Color.white.getRGB(), responseImage.getPixel(x, y), "Expected white background");
        }
    }
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) MockSlingHttpServletRequest(org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest) MockSlingHttpServletResponse(org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse) Layer(com.day.image.Layer) Test(org.junit.jupiter.api.Test) AbstractImageTest(com.adobe.cq.wcm.core.components.internal.models.v1.AbstractImageTest)

Aggregations

Layer (com.day.image.Layer)29 ValueMap (org.apache.sling.api.resource.ValueMap)10 Test (org.junit.Test)10 ValueMapDecorator (org.apache.sling.api.wrappers.ValueMapDecorator)9 InputStream (java.io.InputStream)5 Resource (org.apache.sling.api.resource.Resource)4 Rendition (com.day.cq.dam.api.Rendition)3 Color (java.awt.Color)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 Asset (com.day.cq.dam.api.Asset)2 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)2 BufferedImage (java.awt.image.BufferedImage)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 MockSlingHttpServletRequest (org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest)2 MockSlingHttpServletResponse (org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse)2 NamedImageTransformer (com.adobe.acs.commons.images.NamedImageTransformer)1 WorkflowHelper (com.adobe.acs.commons.util.WorkflowHelper)1 AbstractImageTest (com.adobe.cq.wcm.core.components.internal.models.v1.AbstractImageTest)1 DownloadResource (com.day.cq.commons.DownloadResource)1 ImageResource (com.day.cq.commons.ImageResource)1