aem - 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 端图像的清晰度。需要增加分辨率或获取原始图像
解决方案
免责声明:
我只会在com.day.cq.dam.api
. 有一个较新的 APIcom.adobe.granite.asset.api
有所不同并且缺少一些功能,这就是我通常更喜欢使用“旧”API 的原因。
在 AEM 中有多种获取再现的方法,它们都有优点和缺点。
在我开始解释几种获取演绎版的方法之前,您应该遵循两条规则以使您的生活更轻松:
- 永远不要期望存在缩略图或 Web 再现。
- 除下载外,切勿使用原始版本。
你写了:
需要增加分辨率或获得原始图像。
如果您只想获得原始版本,您可以简单地使用:
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
,它会尝试找到最接近的最佳拟合再现。这在某些情况下也很方便。
链接:
推荐阅读
- reactjs - 如何计算复杂的 SQL 查询以响应后端并获取结果
- javascript - (React fetch data)这两者有什么区别
- java - 如何使用脚本化管道在詹金斯构建描述中添加超链接
- r - Tidy Eval:不可能在嵌套函数中使用 {{var}}?
- java - 高负载下的 Netty WorkerPool
- winapi - 关于段堆的问题
- kubernetes - kubectl get node 无法连接到服务器
- xml - 在 XML 中查找字符串并替换部分字符串
- performance-testing - 任何应用程序通常需要多少时间进行负载测试才能给出指标?
- jquery - 需要启用按钮 WHEN Recaptcha 和复选框已被验证