TYPO3 生成不同大小的图像
TYPO3 Produce images in different sizes
我有这个实现,在页面 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 等等,但我不熟悉寄存器计数器(也许有人可以告诉我如何做到这一点?)。还有另一种方法是使用 file/image 索引号,但我已经尝试查看手册数小时以查找此类指针,但如果有任何有助于处理的信息,则无处列出。有人知道这样做的方法吗?
渲染两个具有不同参数的连续图像在打字错误中会很困难:
您的 optionsplit 无法成功,因为在 renderObj 中您始终只有一个文件。所有人的坏习惯renderObj
.
另一方面:没有 属性 optionSplit
。该功能是在任何包装中构建的 属性.
因此,打字稿中的处理可能是连接元素,然后再次拆分它们,然后在拆分 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
将为每次迭代处理要存储的正确值。
它对我有用。希望对大家有帮助。
我有这个实现,在页面 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 等等,但我不熟悉寄存器计数器(也许有人可以告诉我如何做到这一点?)。还有另一种方法是使用 file/image 索引号,但我已经尝试查看手册数小时以查找此类指针,但如果有任何有助于处理的信息,则无处列出。有人知道这样做的方法吗?
渲染两个具有不同参数的连续图像在打字错误中会很困难:
您的 optionsplit 无法成功,因为在 renderObj 中您始终只有一个文件。所有人的坏习惯renderObj
.
另一方面:没有 属性 optionSplit
。该功能是在任何包装中构建的 属性.
因此,打字稿中的处理可能是连接元素,然后再次拆分它们,然后在拆分 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
将为每次迭代处理要存储的正确值。
它对我有用。希望对大家有帮助。