如何使用AbstractImageServlet获取在DAM上传的图像的原始再现?

时间:2016-03-30 04:25:47

标签: cq5 aem

我们通过扩展AbstractImageServlet编写了一个自定义servlet,并将其注册到自定义选择器,我们重写了createLayer方法。从图像返回图层或从图像的原始再现中获取图层后,不会返回原始图像和图像的高度

Image img=new Image(imageContext.resource);
Layer layer=img.getLayer(true, true, true);
return layer;

Resource imgResource = imageContext.request.getResourceResolver()
                .getResource(imagePath);
        Layer layer=imgResource.getLayer(true, true, true);
        return layer;

其中imagePath是图像原始再现的路径

DAM中原始图像再现的大小为2048×1100和220 KB

但是从原始节目获取图层后,servlet返回的图像大小为1280 * 687和292 KB

com.day.cq.wcm.foundation.Image类的getLayer方法不会返回原始绘制的完全相同的大小。

如何使原始图像的自然大小成为扩展AbstractImageServlet的自定义servlet?

2 个答案:

答案 0 :(得分:1)

当上传的图片宽度超过1280像素时,我们将面临上述情况。 AbstractImageServlet.ImageContext的最大宽度为1280px。当您上传了宽度为2048像素的图像时,它已调整大小。 如果您尝试宽度小于1280像素的图像,则不会调整其大小。

但是,您必须更新系统配置中的一项服务和一项DAM资产工作流程步骤才能使其正常工作。

配置:Day CQ DAM缓冲图像缓存 属性:Max Dimension" 2048x2048"

工作流程步骤:DAM更新资产:处理缩略图: 启用Web的图像:宽度 - 2048和高度 - 2048.

有关详细信息,请查看以下链接:

https://helpx.adobe.com/experience-manager/kb/remove-web-rendition-dimension-limit.html

https://helpx.adobe.com/experience-manager/kb/cqbufferedimagecache-consumes-heap-during-asset-uploads.html

答案 1 :(得分:0)

还有另一种选择为原始呈现获取图层 - 当你有图像资源时,你可以做下一件事:

Asset asset = imageResource.adaptTo(Asset.class);
Rendition original = asset.getOriginal();
Layer layer = new Layer(original.getStream());