TYPO3产生不同尺寸的图像

时间:2020-03-31 18:36:28

标签: typo3 typoscript typo3-10.x

我有此实现,可在第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等,但是对寄存器计数器不熟悉(也许有人可以向我展示如何执行此操作?)。还有另一种方法是使用文件/图像索引号,但是我试图在手册中寻找这样的指针数小时,如果有任何帮助的地方,它在任何地方都没有列出。有人知道这样做的方法吗?

2 个答案:

答案 0 :(得分:1)

用打字稿渲染两个连续的具有不同参数的图像将很困难:
您的optionsplit无法成功,因为在renderObj中您始终只有一个文件。所有renderObj的坏习惯。

另一方面,

:没有属性optionSplit。该功能内置在任何wrap属性中。

因此,打字稿中的处理可能是连接元素,然后再次拆分元素,然后在拆分的renderObj中使用不同的选项分别处理它。
或使用寄存器变量实现计数器,然后评估寄存器以设置不同的值。

更简单的方法是轻松处理,您可以在f:for viewhelper中使用迭代器,然后执行f:if(针对两种情况)或f:switch(针对更多情况)大小写){iterator.index}来呈现各个版本。

答案 1 :(得分:0)

基于def scatter_hist(df, despliegue): # una funcion para crear un grafico compuesto de scatter de potencia y un histograma. Recibe # un DataFrame y debe tiene un filtro de fecha, y varios filtros de colores para los rangos # de potencia # PARAMETROS DE ENTRADA df = df despliegue = despliegue # RANGOS rango_normal = [0.0, 22.0] rango_optimo = [22.0, 25.9] rango_critico = [26.0, 27.0] rango_fuera = [27.0, 40.0] # COLORES color_normal = 'yellow' color_optimo = 'green' color_critico = 'orange' color_fuera = 'red' rangos = [rango_normal, rango_optimo, rango_critico, rango_fuera] colores = [color_normal, color_optimo, color_critico, color_fuera] # TAMAÑO FIGURA fig = plt.figure(figsize = (20, 10)) grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2) # PARAMETROS FIGURA w = 2 n = math.ceil((df['ATENUACION_DS'].max() - df['ATENUACION_DS'].min()) / w) # Xs PARA LOS RANGOS equises = [] for rango in rangos: x = df[(df['DESPLIEGUE']== despliegue) & (df['ATENUACION_DS'] > rango[0]) & (df['ATENUACION_DS'] < rango[1])]['DISTANCIA'] equises.append(x) # Ys PARA LOS RANGOS yeses = [] for rango in rangos: y = df[(df['DESPLIEGUE']== despliegue) & (df['ATENUACION_DS'] > rango[0]) & (df['ATENUACION_DS'] < rango[1])]['ATENUACION_DS'] yeses.append(y) # CREACION DE LA FIGURA # SCATTER main_ax = fig.add_subplot(grid[:-1,1:]) main_ax.tick_params(labelsize=20) y_hist = fig.add_subplot(grid[:-1,0], sharey=main_ax) y_hist.tick_params(labelsize=10) y_hist.invert_xaxis() plt.title('Atenuacion vs Distancia, con Histograma de Atenuacion ({} - {})'.format(despliegue, df[df['DESPLIEGUE']==despliegue]['EMPRESA_COLABORADORA']), fontsize=20) plt.xlabel('Distancia', fontsize=20) for (x, y, color) in zip(equises, yeses, colores): main_ax.scatter(x, y, alpha=0.5, color= color) # HISTOGRAMA for (y, color) in zip(yeses, colores): y_hist.hist(y, bins=n, orientation='horizontal', color=color) plt.show() 的回答,即每个页面(作为项目)在每次迭代中都以@Bernd s作为对象交付,可以通过以下两种方式之一实现这种图像渲染:

首先, 通过使用两个寄存器条目TMENU,它们保存了您将要处理的项目总数;和register:count_menuItems,其中包含要迭代的当前项目的索引(从1开始)。这两个可以与register:count_MENUOBJ语句结合使用,以根据自己的喜好彻底处理每个图像。如果页面上有多张图像,则可以使用另外两个注册项目,分别是CASE(从0开始计数)和register:FILES_COUNT。由于这些注册表项本身就是计数器,因此无需实现注册表计数器。

第二, 如@Bernd所述,有一种更简单的方法,一种省时得多的方法,使用自动换行,如下所示;

register:FILES_NUM_CURRENT

如您所见,此代码正在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的{​​{1}}已包含stdWrap。因此,通过存储所需的模式,wrap将为每次迭代处理要存储的正确值。

它对我有用。希望对别人有帮助。