Adobe CQ5.5-如何使用API​​显示页面缩略图

时间:2013-04-18 04:23:41

标签: cq5

我已使用sidekick>页面属性>图像标签为我的页面配置了图像。现在我想在我的一个jsp中获取我的这个页面图像(缩略图)。有人可以给我api类的指针或代码片段以及我可以用来实现此目的的方法。

谢谢, 拉杰夫

2 个答案:

答案 0 :(得分:2)

我建议使用默认图像组件作为示例 - / libs / foundation / components / image。

如果您将代码放入特定页面类型的组件中,您的代码应该是这样的:

if (currentNode.hasNode("image")) {
    String imagePath = currentNode.getNode("image").getPath();
    Resource imageRes = resourceResolver.getResource(imagePath);
    image = new Image(imageRes);

    image.loadStyleData(currentStyle);
    image.setSelector(".img");

    if (!currentDesign.equals(resourceDesign)) {
        image.setSuffix(currentDesign.getId());
    }
    image.draw(out);
}

请注意,即使您设置了图片,但这并不意味着它会显示 - 如果您使用页面属性的默认页面对话框,它只会显示损坏的图像。这是因为CQ中存在一个错误,其中图像的sling:resourceType属性未设置,因此它不会显示。这是因为放在图像上的.img选择器不知道该怎么做,除非它指向具有.img选择器定义的资源类型,因此它可以正确地渲染图像。

我上传了一个软件包,您可以将其用作默认/ libs / foundation / components / page组件对话框的问题的修补程序,以便在上传图像时实际设置资源类型。您可以从我的Google Drive

中找到/下载该软件包

希望这会有所帮助。如果您需要更多帮助,请告诉我。

修改

如果您尝试从另一个页面上的一个页面获取页面属性图像,则只需使用资源解析程序。你应该在CQ中有一个可用的,所以这基本上就是代码:

Resource imageRes = resourceResolver.getResource(pathFromYourDialog);
Image image = new Image(imageRes);

其余的将是相同的 - 你只是给它一个不同的开始路径。

答案 1 :(得分:0)

我认为Nicholaus在他的EDIT答案中更能满足您的迫切需求。如果用户通过对话框(即DAM图像)为您提供缩略图的路径。

您可以简单地创建图像,或者如果它具有DAM信息,您可以将其作为DAM资源加载并提取必要的信息。

Image image = new Image();
Resource imageResource = resourceResolver.getResource(imageUrl);
Asset imageAsset = imageResource.adaptTo(Asset.class);

Map<String, Object> valueMap = imageAsset.getMetadata();

long width = Long.parseLong(valueMap.get("tiff:ImageWidth").toString());
long height = Long.parseLong(valueMap.get("tiff:ImageLength").toString());
Object titleObject = valueMap.get("tiff:ImageTitle");
String title = (titleObject == null) ? null : titleObject.toString();

if (title != null)
{
  image.setTitle(title);
}

image.setWidth(width);
image.setHeight(height);
image.setUrl(imageUrl);

对于Nicholaus建议的内容,这是一个很长的手,Image类将根据您传递的资源创建自己。 (实际上为此赞成了Nicholaus,我们可以进行一些优化)。

另一个更简单的选择就是只使用用户经过的src,如果你正在做的就是设置缩略图。我猜你可以安全地做类似的事情:

在java中:

String thumbSrc = properties.get("thumbSrc", "defaultThumbnail.path");
if (!thumbSrc.isEmpty())
{
  pageContext("thumbSrc", thumbSrc);
}

在jsp中:

<img alt="thumbnail" src="${thumbSrc}"/>

或者如果您不想在Java中执行任何操作,您可以执行类似

的操作
<c:if test="${not empty properties.thumbSrc}">
  <img alt="thumbnail" src="${properties.thumbSrc}"/>
</c:if>

为了获得与jsp中第一部分相同的结果,你需要将它包装在一个选择中,因为在发送到视图之前将其传递给某些处理会使设置默认值变得更容易。