用 Python 和 Scribus 制作一个 RGB 立方体
当我决定今年夏天玩色彩时,我想到了颜色通常描绘在色轮上的事实。这通常是颜料颜色而不是光,您会失去对颜色亮度或亮度变化的任何感觉。 作为色轮的替代方案,我提出了使用一系列图表在立方体表面显示 RGB 光谱的想法。 RGB 值将在具有 X 轴、Y 轴和 Z 轴的三维图上描绘。例如,一个表面将 B(或蓝色)保持为 0,其余轴将显示当我将值绘制为 R(红色)和 G(绿色)从 0 到 255 的颜色时发生的
当我决定今年夏天玩色彩时,我想到了颜色通常描绘在色轮上的事实。这通常是颜料颜色而不是光,您会失去对颜色亮度或亮度变化的任何感觉。
作为色轮的替代方案,我提出了使用一系列图表在立方体表面显示 RGB 光谱的想法。 RGB 值将在具有 X 轴、Y 轴和 Z 轴的三维图上描绘。例如,一个表面将 B(或蓝色)保持为 0,其余轴将显示当我将值绘制为 R(红色)和 G(绿色)从 0 到 255 的颜色时发生的情况。
事实证明,使用Scribus及其Python Scripter功能来做到这一点并不难。我可以创建 RGB 颜色,制作显示颜色的矩形,并以 2D 格式排列它们。我决定为颜色设置 5 的值跳跃,并制作一边测量 5 个点的矩形。因此,对于每个 2D 图形,我会制作大约 250 种颜色,并且立方体的边长为 250 点,即 3.5 英寸。
我使用这段 Python 代码来完成绿-红图的任务:
x \u003d 300
y \u003d 300
r \u003d 0
g \u003d 0
b \u003d 0
如果 writer.newDoc(writer.PAPER_LETTER, (0,0,0,0),writer.PORTRAIT, 1, writer.UNIT_POINTS, writer.NOFACINGPAGES, writer.FIRSTPAGERIGHT):
当 r < 256 时:
当 g < 256 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '0_0_0':
新颜色 \u003d '黑色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
d y u003d d + 5
g \u003d 0
r \u003d r + 5
y \u003d y – 5
该脚本从 300, 300 开始图形结构,大约是美国 Letter 大小页面的水平中间位置,可能是从顶部向下的三分之一;这是图表的起源。然后它沿 X 轴(绿色值)水平构建图形,然后返回 Y 轴,向上跳页 5 个点,并制作另一行矩形。
这看起来很容易;我只会摆弄数字并制作其他方面。但这不仅仅是再制作两张图表的问题,一张是蓝-绿,另一张是红-蓝。我想创建一个展开的立方体,以便可以打印、剪切、折叠并创建 RGB 的 3D 视图。因此,下一部分(页面向下)需要在左上角有原点(黑色角),绿色水平方向和蓝色垂直向下增加。
“摆弄数字”最终或多或少地反复试验以获得我想要的东西。创建第二个图形后,我需要第三个图形,即红色-蓝色,其原点位于左上角,红色向左增加,蓝色向下增加。
这里是:
当然,这只是这个立方体的前半部分。我需要制作一个类似的形状,除了原点应该是白色(而不是黑色)来表示高值。这是我希望自己更聪明的时候之一,因为我不仅需要制作类似的整体形状,还需要以镜像的方式与第一个形状交互(我认为)。有时,反复试验是你唯一的朋友。
这是怎么出来的;我使用了一个单独的脚本,因为在美国信纸大小的页面上没有足够的空间供他们两个使用:
现在,它是关闭的打印机!在这里,您可以了解彩色打印机在 RGB 到 CMYK 转换以及打印色彩密集空间的其他方面的表现。
接下来,男孩和女孩,这是剪切和粘贴时间!我可以使用胶带,但我不想改变表面的外观,所以我在切割时在侧面留下了一些标签,这样我就可以将它们粘在里面。根据经验,我可以说在复印纸上打印会出现一些不受欢迎的皱纹,所以在我的复印纸原型之后,我将立方体打印在较重的哑光纸上。
请记住,这只是 RGB 空间边界的视图;为了更准确,您必须制作一个可以在中间切片的实心立方体。例如,这将是一个通过实心 RGB 立方体的切片,其中 Blue u003d 120:
最后,我在这个项目上玩得很开心。如果您想加入聚会,这里有两个脚本。这些脚本需要 Scribus 1.5.x,它提供了 defineColorRGB() 函数。
这是前半部分:
#!/usr/bin/env python
# black2rgb.py
"""
以黑色为原点创建二分之一的 RGB 立方体
"""
进口业务员
x \u003d 300
y \u003d 300
r \u003d 0
g \u003d 0
b \u003d 0
如果 writer.newDoc(writer.PAPER_LETTER, (0,0,0,0),writer.PORTRAIT, 1, writer.UNIT_POINTS, writer.NOFACINGPAGES, writer.FIRSTPAGERIGHT):
当 r < 256 时:
当 g < 256 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '0_0_0':
新颜色 \u003d '黑色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
d y u003d d + 5
g \u003d 0
r \u003d r + 5
y \u003d y - 5
r \u003d 0
g \u003d 0
y \u003d 305
当 b < 256 时:
当 g < 256 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '0_0_0':
新颜色 \u003d '黑色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
d y u003d d + 5
g \u003d 0
b \u003d b + 5
y \u003d y + 5
r \u003d 255
g \u003d 0
y \u003d 305
x \u003d 39
b \u003d 0
当 b < 256 时:
当 r >u003d 0 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '0_0_0':
新颜色 \u003d '黑色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
r \u003d r - 5
x \u003d x+5
b \u003d b + 5
x \u003d 39.5
r \u003d 255
y \u003d y + 5
write.setRedraw(True)
scribus.redrawAll()
现在下半场:
#!/usr/bin/env python
# white2rgb.py
"""
以白色为原点创建二分之一的 RGB 立方体
"""
进口业务员
x \u003d 300
y \u003d 300
r \u003d 255
g \u003d 255
乙 \u003d 255
如果 writer.newDoc(writer.PAPER_LETTER, (0,0,0,0),writer.PORTRAIT, 1, writer.UNIT_POINTS, writer.NOFACINGPAGES, writer.FIRSTPAGERIGHT):
当 g >u003d 0 时:
当 r >u003d 0 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '255_255_255':
新颜色 \u003d '白色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x + 255 - r, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
r \u003d r - 5
r \u003d 255
d y u003d d - 5
y \u003d y - 5
r \u003d 255
g \u003d 255
y \u003d 305
而 b >u003d 0:
当 r >u003d 0 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '255_255_255':
新颜色 \u003d '白色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x + 255 - r, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
r \u003d r - 5
r \u003d 255
b \u003d b - 5
y \u003d y + 5
r \u003d 255
g \u003d 0
y \u003d 305
x \u003d 39
乙 \u003d 255
而 b >u003d 0:
当 g < 256 时:
新颜色 \u003d str(r) + '_' + str(g) + '_' + str(b)
如果新颜色 \u003du003d '255_255_255':
新颜色 \u003d '白色'
scribus.defineColorRGB(newcolor,r,g,b)
矩形 \u003d scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(新颜色,矩形)
scribus.setLineColor(新颜色,矩形)
d y u003d d + 5
g \u003d 0
b \u003d b - 5
y \u003d y + 5
write.setRedraw(True)
scribus.redrawAll()
由于我正在创建大量颜色,因此看到 Scribus 文件比我制作的 PDF 文件大得多,我并不感到惊讶。例如,我的 Scribus SLA 文件为 3.0MB,而我从中生成的 PDF 只有 70KB。
更多推荐
所有评论(0)