首页 > 解决方案 > DAM 资产再现 - 获取 cq5dam.thumbnail.48.48.png 再现,但需要原始再现

问题描述

String itemPath = "/content/dam/global-abc/mcos/benefra/nl/custom/product-images/25-nl-107855/fact3.jpg";

String thumbnailUrl = itemPath;

if (assetManager != null) {                        
   Asset asset = assetManager.getAsset(itemPath);

   thumbnailUrl = asset.listRenditions().hasNext() ?
                  asset.listRenditions().next().getPath() : itemPath;

}

asset.listRenditions().next().getPath() 给出 /content/dam/global-abc/mcos/benefra/nl/custom/product-images/25-nl-107855/fact3.jpg/jcr:content/renditions /cq5dam.thumbnail.48.48.png 这将降低 UI 端图像的清晰度。需要增加分辨率或获取原始图像

标签: aem

解决方案


免责声明:

我只会在com.day.cq.dam.api. 有一个较新的 APIcom.adobe.granite.asset.api有所不同并且缺少一些功能,这就是我通常更喜欢使用“旧”API 的原因。


在 AEM 中有多种获取再现的方法,它们都有优点和缺点。

在我开始解释几种获取演绎版的方法之前,您应该遵循两条规则以使您的生活更轻松:

  1. 永远不要期望存在缩略图或 Web 再现。
  2. 除下载外,切勿使用原始版本。

你写了:

需要增加分辨率或获得原始图像。

如果您只想获得原始版本,您可以简单地使用:

Rendition rendition = asset.getOriginal();

但是,如果您想获得缩略图或网络再现,您应该使用RenditionPicker.

要获得缩略图再现,您可以使用:

PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL, true)
Rendition rendition = picker.getRendition(asset);

这将为您提供选择器将找到的第一个缩略图再现。从理论上讲,您可以通过像这样扩展代码来强制进行某种缩略图再现:

PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL + ".319", true)
Rendition rendition = picker.getRendition(asset);

这将返回319px名称为 的缩略图再现cq5dam.thumbnail.319.319.png。但请记住,不能保证这种再现存在。如果没有具有此名称的演绎版,则RenditionPicker上面的将简单地返回original演绎版(因为我们用作true第二个参数)。

可以使用相同的过程来获取网络版本。您可以使用上面的演绎选择器,只需使用另一个常量:

PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_WEB, true)
Rendition rendition = picker.getRendition(asset);

或者您使用专用的WCMRenditionPicker

WCMRenditionPicker picker = new WCMRenditionPicker();
Rendition rendition = picker.getRendition(asset);

但和以前一样,这将返回找到的第一个演绎版,如果没有找到,则返回null 。

RenditionPicker根据您的用例,您可能希望通过实现以下接口来创建自己的:

com.day.cq.dam.api.RenditionPicker

我还想提到另一个 API,即com.day.cq.dam.commons.util.UIHelper. 此类包含一些有趣的方法,例如:

getBestfitRendition(Asset asset, int width)

此方法将允许您指定所需的width,它会尝试找到最接近的最佳拟合再现。这在某些情况下也很方便。

链接:

  1. 资产 Javadoc
  2. 再现 Javadoc
  3. PrefixRenditionPicker Javadoc
  4. WCMRenditionPicker Javadoc
  5. PREFIX_ASSET_THUMBNAIL 常量 Javadoc
  6. PREFIX_ASSET_WEB 常量 Javadoc
  7. UIHelper Javadoc

推荐阅读