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:forviewhelper 的迭代器,然后执行 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 存储的不同规则处理每个图像。诀窍在于包装。 stdWrapwrap 已经包含 optionSplit。因此,通过存储所需的模式,stdWrap 将为每次迭代处理要存储的正确值。

它对我有用。希望对大家有帮助。