如何获得ImageRendition大小?

时间:2017-09-26 15:01:09

标签: java freemarker magnolia

我希望在图像处理器(ImageVariations)缩放/裁剪之后检索玉兰中图像的高度和宽度,但我似乎没有找到正确的方法。

这是我在theme.yaml中做出的一个定义:

imaging:
  class: info.magnolia.templating.imaging.VariationAwareImagingSupport
  variations:
    "large":
      class: info.magnolia.templating.imaging.variation.SimpleResizeVariation
      width: 745
  [...]

我所做的是以下内容:

  • 在我的模板(FTL)中,我首先通过编写[#assign itemKey = content.backgroundImage!""]来获取JCR密钥。

  • 我正在使用DamFunctions来检索资产的关键 damfn.getAsset(itemKey);

  • 我正在使用dam.getRendition(asset, renditionName)

  • 获取再现(我将其理解为图像的缩放版本)

我可以从AssetMetaData读取宽度和高度,但即使使用Rendition对象,我仍然会获得原始资产元数据,而不是预期的缩放值。

我做错了吗?

编辑:你能看看这张照片吗?它显示了我将用于检索maxwidth和maxheight的路径。请告诉我有可能这样做。

 /modules/imaging/config/generators/large/operations/resize@maxWidth

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用DAM API 1.x,你回来的Rendition只是扩展资产而不对元数据做任何事情,因此你得到的元数据确实是原始资产的元数据。
使用DAM API 2.x时,Rendition现在可以识别出再现的元数据与原始资产的元数据不同,但它没有提供正确的元数据,只是抛出{{1} }}。
所以你被困在任何一个方向。根据您的描述,我假设您正在使用一些旧版本的Magnolia,其中仍然使用DAM 1.x.

至于问题的解决方案,了解图像再现大小的唯一方法是了解您使用的变化将如何影响图像。
要动态获取它,您需要获取UnsupportedOperationException对象,找出应使用哪个图像生成器(可以作为再现链接路径的一部分找到),从Imaging获取正确的生成器,很可能是Imaging的实例,你需要将它原始图像加上所有指定为你想要的再现的一部分的操作,让它做它的工作,然后阅读生成的缓冲图像的宽度/高度,然后抛弃所有这些。在渲染模板期间,这样做效率非常低。

编辑: 如果要直接从映像模块读取配置,则需要通过JCR API读取配置,并确保在系统上下文中执行此操作,因为普通用户无法访问此类信息(或者无论如何都不应该访问)。
ImageOperationChain这样的东西应该做。但是它仍然需要你知道将使用什么生成器,并且只为发生器提供参数,而不是保证它将以给定的方式修改资源。例如。在这种情况下,如果资产的宽度小于${ctx.getSystemContext().getJCRSession("config").getNode("/modules/imaging/config/generators/large/operations/resize").getProperty("maxWidth").getString()},图像将不会调整为渲染资产宽度将小于1300.但我想你已经知道了。