2017-09-26 113 views
0

我想要检索高度和宽度在magnolia 中的图像后,它被图像处理器(ImageVariations)缩放/裁剪,但我似乎没有找到正确的方法。如何获取ImageRendition大小?

这是一个定义我在东京theme.yaml:

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

我做的是以下几点:

  • 在我的模板(FTL)我首先通过取得JCR关键写作[#assign itemKey = content.backgroundImage!""]

  • 我使用DamFunctions检索资产由它的键 与damfn.getAsset(itemKey);

  • 我取的绘制(我理解为图像的缩放版本)与dam.getRendition(asset, renditionName)

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

我做错了什么?

编辑:你能看看这张照片吗?它显示了我将用来检索最大宽度和最大高度的路径。请告诉我可以这样做。

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

感谢您的帮助!

回答

1

随着DAM API 1.x,Rendition你回来只是扩展资产和元数据无所作为,因此你回来的元确实是原始资产的元数据。
随着DAM API 2.x的变得稍微好一点,Rendition现在认识到,再现的元数据与原始资产不一样,但它不提供正确的元,只是抛出UnsupportedOperationException
所以你被卡住了。从你的描述中,我推测你正在使用一些老版本的Magnolia,其中仍然使用DAM 1.x。

至于解决问题的方法,知道图像再现的大小的唯一方法就是了解你使用的变化会如何影响图像。
要动态获取它,您需要弄清楚Imaging对象,确定应使用哪个图像生成器(可以作为再现链接路径的一部分找到),从Imaging获取正确的生成器,最有可能的是ImageOperationChain的实例,您需要为它提供原始图像以及所有指定为您想要的绘制的一部分的操作,让它完成工作,然后从生成的缓冲图像中读取宽度/高度,然后丢弃所有这些。在渲染模板时做效率非常低。

编辑: 如果您想直接从成像模块读取配置,则需要通过JCR API来读取它,并确保你在系统方面也这样做普通用户有这样的信息无法获得(或不应该”无论如何)。
${ctx.getSystemContext().getJCRSession("config").getNode("/modules/imaging/config/generators/large/operations/resize").getProperty("maxWidth").getString()}应该做的。但它仍然需要你知道将使用什么发生器,只是给你发电机的参数,而不保证它会以给定的方式修改资源。例如。在这种情况下,如果资产的宽度小于maxWidth,图像将不会被调整大小,呈现的资产宽度将小于1300.但我想你已经知道了。

+0

感谢您的回答,Jan!但是,我可以简单地使用渲染的名称(变体)来找出它的最大宽度,这样我就可以根据它进行分割并获得我需要的高度? – Manticore

+1

不知何故,是的。理想情况下,从当前状态获取网站,然后使用它获取当前主题,从主题获取映像和所有列出的变体。但成像不会将配置变体的列表暴露给外部。你需要做的是,一旦你通过'$ {state.site.theme.name}找到主题名字'获得该名称并获得主题节点(假设你的主题仍然存在于存储库中)并从那里读取变体。如果您的主题配置在光照模块中并且位于文件系统中,则很可能会卡住。 – Jan

+0

我编辑了我的答案,并添加了一张图片,显示我将使用的路径。是的,我正在使用YAML Configuration作为主题。你认为有一种方法可以使用NodeUtil或其他东西来获取该节点路径后面的属性值吗?或者说,你的'成像意味着什么'没有公布配置变化的列表'外部'?我看到的另一个路径是'/modules/site/config/themes/"+siteTheme.getName()+"/imaging/variations'... – Manticore