首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DAM Asset Renditions获得cq5dam.umbnail.48.48.ng引渡,但需要原始的引渡

DAM Asset Renditions获得cq5dam.umbnail.48.48.ng引渡,但需要原始的引渡
EN

Stack Overflow用户
提问于 2019-03-22 11:06:05
回答 1查看 1.1K关注 0票数 0
代码语言:javascript
复制
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端图像的清晰度。需要提高分辨率或获取原始图像

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 13:58:15

免责声明:

我只想提到com.day.cq.dam.api中的“旧”Asset。在com.adobe.granite.asset.api中有一个新的API,它不同而且缺乏一些特性,这就是为什么我通常更喜欢使用“旧”API。

在AEM中有几种获得引渡的方法,它们都有其优点和缺点。

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

  1. 不要期望缩略图或网络再现存在。
  2. 除非下载,否则不要使用原始版本。

你写道:

需要提高分辨率或获得原始图像。

如果您只想获得原始的呈现,只需使用:

代码语言:javascript
复制
Rendition rendition = asset.getOriginal();

但是,如果你想得到一个缩略图或网络渲染,你应该使用其中一个RenditionPicker

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

代码语言:javascript
复制
PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL, true)
Rendition rendition = picker.getRendition(asset);

这将给你的第一个缩略图呈现,选择者会找到。理论上,您可以通过像这样扩展代码来强制进行特定的缩略图呈现:

代码语言:javascript
复制
PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL + ".319", true)
Rendition rendition = picker.getRendition(asset);

这将返回名为319px cq5dam.thumbnail.319.319.pngcq5dam.thumbnail.319.319.png缩略图呈现。但请记住,不能保证这种引渡存在。如果没有这个名称的呈现,上面的RenditionPicker只会返回original呈现(因为我们使用true作为第二个参数)。

同样的过程也可以用来获得网页渲染。您可以使用上面的呈现选择器,只需使用另一个常量:

代码语言:javascript
复制
PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_WEB, true)
Rendition rendition = picker.getRendition(asset);

或者使用专用的WCMRenditionPicker

代码语言:javascript
复制
WCMRenditionPicker picker = new WCMRenditionPicker();
Rendition rendition = picker.getRendition(asset);

但与前面一样,这将返回找到的第一个呈现,如果没有找到,则返回null。

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

代码语言:javascript
复制
com.day.cq.dam.api.RenditionPicker

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

代码语言:javascript
复制
getBestfitRendition(Asset asset, int width)

此方法将允许您指定所需的width,并且它将试图找到最近的最适合的呈现方式。在某些情况下,这也非常方便。

链接:

  1. 资产Javadoc
  2. 引渡Javadoc
  3. PrefixRenditionPicker Javadoc
  4. WCMRenditionPicker Javadoc
  5. 缩略图常数Javadoc
  6. WEB常量Javadoc
  7. UIHelper Javadoc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55298293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档