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