Aem DAM资产格式副本-获取cq5dam.thumboil.48.48.png格式副本,但需要原始格式副本

Aem DAM资产格式副本-获取cq5dam.thumboil.48.48.png格式副本,但需要原始格式副本,aem,Aem,asset.listRenditions().next().getPath()提供/content/dam/global abc/mcos/benefra/nl/custom/product images/25-nl-107855/fact3.jpg/jcr:content/renderations/cq5dam.thumboil.48.48.png,这将降低UI端图像的清晰度。需要提高分辨率或获取原始图像免责声明: 我只想在com.day.cq.dam.API中提到“旧”资产API。com.a

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

免责声明:

我只想在
com.day.cq.dam.API
中提到“旧”资产API。
com.adobe.granite.asset.API
中有一个较新的API,它不同并且缺少一些功能,这就是为什么我通常更喜欢使用“旧”API的原因


在AEM中有几种获得格式副本的方法,所有这些方法都有其优缺点

在我开始解释几种获取格式副本的方法之前,有两条规则可以让您的生活更轻松:

  • 不要期望缩略图或web格式副本存在
  • 除下载外,切勿使用原始格式副本
  • 你写道:

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

    如果您只想获得原始格式副本,只需使用:

    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;
    
    }
    
    但是,如果您想获取缩略图或web格式副本,则应使用其中一个
    格式副本选择器

    要获取缩略图格式副本,您可以使用:

    Rendition rendition = asset.getOriginal();
    
    这将为您提供选择器将找到的第一个缩略图格式副本。理论上,您可以通过如下方式扩展代码来强制执行某个缩略图格式副本:

    PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL, true)
    Rendition rendition = picker.getRendition(asset);
    
    这将返回名为
    cq5dam.thumboil.319.319.png
    319px
    缩略图格式副本。但请记住,不能保证这种格式副本的存在。如果没有具有此名称的格式副本,则上面的
    RenditionPicker
    将简单地返回
    原始的
    格式副本(因为我们使用
    true
    作为第二个参数)

    同样的过程也可用于获取web格式副本。您可以从上面使用格式副本选择器,也可以使用另一个常量:

    PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_THUMBNAIL + ".319", true)
    Rendition rendition = picker.getRendition(asset);
    
    或者使用专用的
    WCMRenditionPicker

    PrefixRenditionPicker picker = new PrefixRenditionPicker(DamConstants.PREFIX_ASSET_WEB, true)
    Rendition rendition = picker.getRendition(asset);
    
    但与以前一样,这将返回找到的第一个格式副本,如果没有找到,则返回null

    根据您的使用情况,您可能希望通过实现以下接口来创建自己的
    格式副本选择器

    WCMRenditionPicker picker = new WCMRenditionPicker();
    Rendition rendition = picker.getRendition(asset);
    
    我还想提到另一个API,它是
    com.day.cq.dam.commons.util.UIHelper
    。此类包含一些有趣的方法,如:

    com.day.cq.dam.api.RenditionPicker
    
    此方法允许您指定所需的
    宽度
    ,并将尝试查找最接近的最佳格式副本。这在某些情况下也非常方便

    链接:


  • 如果没有此分配资产.ListRenderations().next().getPath(),它可以正常工作。正在尝试找出此asset.ListRenderations().hasNext()检查完成的原因。。asset.ListRenderations().next().getPath()总是将资产的路径指定为cq.web.48.48.png。@RashmiKs您总是得到相同的格式副本,因为您要求格式副本的
    迭代器,然后总是要求第一项,即
    48
    格式副本。如果使用返回迭代器的
    列表格式副本()
    ,则必须使用
    hasNext()
    next()迭代结果
    直到获得所需的格式副本。如果不进行硬编码,如何获得640.640。png@RashmiKs正如我在回答中所说:如果不对其进行硬编码,就无法准确地获取
    640
    格式副本。在这种情况下,最好的解决方案是使用
    UIHelper.getBestfitRendition(asset,640)
    。但这也是一种硬编码,只是它会查找最接近指定宽度
    640
    的缩略图格式副本。因此,它可能会为您提供一个
    600
    格式副本(如果它存在,而
    640
    格式副本将不存在)。但再一次:对于格式副本,基本上没有任何保证。这就是为什么它如此棘手;)我需要使用ListRenderations()本身获取640格式副本。但无法知道其他格式副本在ListRenderations()中的可用位置。只能看到next()的48.48.png路径。
    getBestfitRendition(Asset asset, int width)