首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DAM调整CQ5图像的大小

从DAM调整CQ5图像的大小
EN

Stack Overflow用户
提问于 2013-05-29 01:34:08
回答 1查看 3.6K关注 0票数 0

我希望从大坝调整图像大小,我的图像路径存储在直接链接到大坝资产的路径字段中。其中image是“/content/ DAM /...jpg”;我可以访问DAM路径,我需要使用选择器调整此图像的大小并显示。我尝试了使用基础图像组件的代码,它对我不起作用。

代码语言:javascript
复制
 Resource rsc = resourceResolver.getResource(image);
                    Image img3 = new Image(rsc);

                    img3.setSrc(img3.getPath());
                    img3.setSelector(".myselector");
                    img3.setFileReference(image);

                    img3.draw(out);
EN

回答 1

Stack Overflow用户

发布于 2013-05-29 06:10:19

如果要使用选择器,则需要为其创建一个servlet来扩展AbstractImageServlet。您可以从下面这样的内容开始:

代码语言:javascript
复制
@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将是您想要设置的选择器名称。例如:

代码语言:javascript
复制
//in the servlet
@Property(name="sling.servlet.selectors", value="resize")

//in the jsp
image.setSelector("resize");

在您的类中,您可能希望重写writeLayer方法。如下所示:

代码语言:javascript
复制
@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();
}

在我们的自定义解决方案中,我们在writeLayer方法而不是createLayer方法中处理所有事情。所以我们改写了createLayer。

代码语言:javascript
复制
@Override
protected Layer createLayer(AbstractImageServlet.ImageContext c)
        throws RepositoryException, IOException {
    // don't create the layer yet. handle everything later
    return null;
}

我们还重写了createImageResource

代码语言:javascript
复制
/**
 * {@inheritDoc}
 *
 * Override default ImageResource creation to support assets
 */
@Override
protected ImageResource createImageResource(Resource resource) {
    return new Image(resource);
}

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16798123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档