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端图像的清晰度。需要提高分辨率或获取原始图像
答案 0 :(得分:1)
免责声明:
我只会在com.day.cq.dam.api
中提及“旧的”资产API。 com.adobe.granite.asset.api
中有一个较新的API,它有所不同且缺乏某些功能,因此我通常更喜欢使用“旧” API。
在AEM中获得引渡的方法有多种,每种方法各有利弊。
在我开始解释获取移交的几种方法之前,应遵循两个规则以简化生活:
您写道:
需要提高分辨率或获取原始图像。
如果只想获取原始版本,则可以使用:
Rendition rendition = asset.getOriginal();
但是,如果您想获取 a 缩略图或网络副本,则应使用RenditionPicker
之一。
要获取缩略图再现,可以使用:
PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL, true)
Rendition rendition = picker.getRendition(asset);
这将为您提供选择器将找到的 first 缩略图。从理论上讲,您可以通过扩展如下代码来强制生成某种缩略图:
PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL + ".319", true)
Rendition rendition = picker.getRendition(asset);
这将返回名称为319px
的{{1}}缩略图。但是请记住,并不能保证存在这种形式。如果没有使用此名称的演绎,则上方的cq5dam.thumbnail.319.319.png
将简单地返回RenditionPicker
演绎(因为我们使用original
作为第二个参数)。
可以使用相同的过程来获取网络副本。您可以从上方使用移演选择器,而只需使用另一个常量:
true
或者您使用专用的PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_WEB, true)
Rendition rendition = picker.getRendition(asset);
:
WCMRenditionPicker
但是像以前一样,它将返回找到的 first 或 null (如果未找到)。
根据您的用例,您可能希望通过实现以下接口来创建自己的WCMRenditionPicker picker = new WCMRenditionPicker();
Rendition rendition = picker.getRendition(asset);
:
RenditionPicker
我还要提到另一个API com.day.cq.dam.api.RenditionPicker
。此类包含一些有趣的方法,例如:
com.day.cq.dam.commons.util.UIHelper
此方法将允许您指定所需的getBestfitRendition(Asset asset, int width)
,它将尝试找到最合适的 再现形式。在某些情况下这也很方便。
链接: