我有此实现,可在第2级页面子菜单中使用它。每个2级菜单都有多个子页面。每个子页面都有一个图像。因此,此实现会为每个子菜单从每个页面生成一个图像。例如,具有2个子页面的子菜单将具有2张图像(每个子页面一个)。
1 = FILES
1 {
references {
table = pages
fieldName = media
data = levelmedia:-1, slide
}
begin = 0
maxItems = 2
renderObj = COA
renderObj {
2 = IMAGE
2 {
file {
//params = -sharpen 50 +profile "*" -quality 100
import.data = file:current:uid
treatIdAsReference = 1
width.optionSplit = 300c|*|400c
height.optionSplit = 350c|*|450c
}
}
}
}
希望将图像裁切成不同的大小,以使图像1被裁切成与图像2不同的尺寸,依此类推。
我的ImageMagick安装效果很好。实际上是用它毫无障碍地裁剪单个图像。
没有上面的optionSplit
,图像被很好地切成大小。不幸的是,使用optionSplit
,它仅以原始尺寸输出图像。
如何产生不同尺寸的图像?我的理解是,optionSplit
是解决方法(来自手册)。我读过一些文章,其中soureCollection
用于响应图像使用optionSplit
。我想象另一种方式是使用图像注册计数器并使用CASE来确定如何剪切图像1、2、3等,但是不熟悉注册计数器(也许有人可以告诉我该怎么做?)。还有另一种方法是使用文件/图像索引号,但是我尝试了数小时的手册才能找到这样的指针,并且如果有任何帮助的地方,没有列出。有人知道这样做的方法吗?
在打字稿中很难渲染两个具有不同参数的连续图像:您的optionsplit不能成功,因为在renderObj中您始终只有一个文件。所有renderObj
的坏习惯。
另一方面:没有属性optionSplit
。该功能是在任何wrap属性中构建的。
因此,在打字稿中的处理可能是连接元素,然后再次拆分它们,然后在拆分的renderObj中使用不同的选项来分别处理它。或使用寄存器变量实现计数器,然后评估寄存器以设置不同的值。
更容易进行流体处理,您可以在f:for
viewhelper中使用迭代器,然后在f:if
上执行f:switch
(对于两种情况)或{iterator.index}
(对于更多情况),以渲染各个版本。
基于@Bernd
的回答,即每个页面(作为项目)在每次迭代中都以TMENU
的形式作为对象交付,可以通过以下两种方式之一实现这种图像渲染:
首先,通过使用两个寄存器条目register:count_menuItems
,其中包含要处理的项目总数; register:count_MENUOBJ
保留要迭代的当前项目的索引(从1开始)。可以将这两个图像与CASE
语句结合使用,以根据自己的喜好彻底处理每个图像。如果页面上有多张图像,则可以使用两个以上的注册项目,分别是register:FILES_COUNT
(从0开始计数)和register:FILES_NUM_CURRENT
。由于这些注册表项本身就是计数器,因此无需实现注册表计数器。
第二,如@Bernd所述,有一种更简单的方法,一种省时得多的方法,使用自动换行,如下所示;
NO = 1
NO {
1 = LOAD_REGISTER
1 {
width.cObject = TEXT
width.cObject.stdWrap.wrap = 100c||200c
height.cObject = TEXT
height.cObject.stdWrap.wrap = 300c||400c
}
2 = FILES
2 {
# Get the images related to the current page
references {
table = pages
fieldName = media
}
# Render each image and wrap it as appropriate
renderObj = IMG_RESOURCE
renderObj {
file {
treatIdAsReference = 1
import.data = file:current:uid
width = {REGISTER:width}
width.insertData = 1
height = {REGISTER:height}
height.insertData = 1
}
}
stdWrap {
wrap = <img src="|" />
}
}
}
如您所见,此代码正在TMENU
中使用,并根据段1
中定义的不同规则处理每个图像,并由LOAD_REGISTER
存储。诀窍在于包装。 stdWrap
的wrap
已包含optionSplit
。因此,通过存储所需的模式,stdWrap
将为每次迭代处理要存储的正确值。
它对我有用。希望它能对某人有所帮助。