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端图像的清晰度。需要提高分辨率或获取原始图像
发布于 2019-03-22 13:58:15
免责声明:
我只想提到com.day.cq.dam.api中的“旧”Asset。在com.adobe.granite.asset.api中有一个新的API,它不同而且缺乏一些特性,这就是为什么我通常更喜欢使用“旧”API。
在AEM中有几种获得引渡的方法,它们都有其优点和缺点。
在我开始解释获得引渡的几种方法之前,您应该遵循两条规则,以使您的生活更轻松:
你写道:
需要提高分辨率或获得原始图像。
如果您只想获得原始的呈现,只需使用:
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的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,并且它将试图找到最近的最适合的呈现方式。在某些情况下,这也非常方便。
链接:
https://stackoverflow.com/questions/55298293
复制相似问题