今年夏天,当我决定要玩转色彩时,我想到了颜色通常在色轮上描绘的事实。这通常是颜料的颜色而不是光,并且你会失去对颜色亮度或光度的变化的感知。
作为色轮的替代方案,我想到了使用一系列图形在立方体表面上显示 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 = 300
y = 300
r = 0
g = 0
b = 0
if scribus.newDoc(scribus.PAPER_LETTER, (0,0,0,0),scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT):
while r < 256:
while g < 256:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '0_0_0':
newcolor = 'Black'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
g = g + 5
g = 0
r = r + 5
y = y – 5
此脚本在 300, 300 处启动图形结构,这大约是 US Letter 尺寸页面水平方向的中间位置,可能在从顶部向下三分之一的位置;这是图形的原点。然后,它沿着 X 轴(绿色值)水平构建图形,然后返回到 Y 轴,在页面上向上跳 5 点,并制作另一行矩形。

这看起来很容易;我只需调整数字并制作其他面。但这不仅仅是制作另外两个图形的问题,一个带有蓝色-绿色,另一个带有红色-蓝色。我打算创建一个展开的立方体,以便我可以打印、切割、折叠它,并创建 RGB 的 3D 视图。因此,下一部分(向下翻页)需要将原点(黑色角)放在左上角,绿色水平方向,蓝色垂直方向向下递增。
“调整数字”最终或多或少变成了反复试验,以获得我想要的结果。在创建第二个图形之后,我需要第三个图形,即红色-蓝色,使其原点位于左上角,红色向左递增,蓝色向下递增。
这就是它

当然,这只是这个立方体的前半部分。我需要制作一个类似的形状,只是原点应该是白色(而不是黑色)来表示高值。这是我希望自己更聪明的时候之一,因为我不仅需要制作一个类似的整体形状,还需要以镜像的方式(我想)与第一个形状对接。有时,反复试验是你唯一的盟友。
这就是结果;我使用了单独的脚本,因为 US Letter 尺寸的页面上没有足够的空间容纳它们。

现在,开始打印吧!在这里,您可以了解您的彩色打印机在 RGB 到 CMYK 转换以及打印颜色密集空间的其他方面的表现如何。
接下来,孩子们,是剪切和粘贴时间!我可以使用胶带,但我不希望改变表面的外观,所以在切割时我在侧面留下了一些标签,以便我可以将它们粘在里面。根据经验,我可以说在复印纸上打印会出现一些不希望有的皱纹,所以在我的复印纸原型之后,我在较重的哑光纸上打印了立方体。

请记住,这只是 RGB 空间边界的视图;要更准确,您必须制作一个实心立方体,您可以将其在中间切片。例如,这将是穿过一个实心 RGB 立方体的切片,其中蓝色 = 120

最后,我很高兴完成这个项目。如果您想加入,这里有两个脚本。这些脚本需要 Scribus 1.5.x,它提供了 defineColorRGB() 函数。
这是前半部分
#!/usr/bin/env python
# black2rgb.py
"""
Creates one-half of RGB cube with Black at origin
"""
import scribus
x = 300
y = 300
r = 0
g = 0
b = 0
if scribus.newDoc(scribus.PAPER_LETTER, (0,0,0,0),scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT):
while r < 256:
while g < 256:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '0_0_0':
newcolor = 'Black'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
g = g + 5
g = 0
r = r + 5
y = y - 5
r = 0
g = 0
y = 305
while b < 256:
while g < 256:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '0_0_0':
newcolor = 'Black'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
g = g + 5
g = 0
b = b + 5
y = y + 5
r = 255
g = 0
y = 305
x = 39
b = 0
while b < 256:
while r >= 0:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '0_0_0':
newcolor = 'Black'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
r = r - 5
x = x+5
b = b + 5
x = 39.5
r = 255
y = y + 5
scribus.setRedraw(True)
scribus.redrawAll()
现在是后半部分
#!/usr/bin/env python
# white2rgb.py
"""
Creates one-half of RGB cube with White at origin
"""
import scribus
x = 300
y = 300
r = 255
g = 255
b = 255
if scribus.newDoc(scribus.PAPER_LETTER, (0,0,0,0),scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT):
while g >= 0:
while r >= 0:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '255_255_255':
newcolor = 'White'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x + 255 - r, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
r = r - 5
r = 255
g = g - 5
y = y - 5
r = 255
g = 255
y = 305
while b >= 0:
while r >= 0:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '255_255_255':
newcolor = 'White'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x + 255 - r, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
r = r - 5
r = 255
b = b - 5
y = y + 5
r = 255
g = 0
y = 305
x = 39
b = 255
while b >= 0:
while g < 256:
newcolor = str(r) + '_' + str(g) + '_' + str(b)
if newcolor == '255_255_255':
newcolor = 'White'
scribus.defineColorRGB(newcolor,r, g, b)
rect = scribus.createRect(x + g, y, 5, 5)
scribus.setFillColor(newcolor, rect)
scribus.setLineColor(newcolor, rect)
g = g + 5
g = 0
b = b - 5
y = y + 5
scribus.setRedraw(True)
scribus.redrawAll()
由于我创建了大量的颜色,因此我并不惊讶地看到 Scribus 文件比我从中制作的 PDF 文件大得多。例如,我的 Scribus SLA 文件为 3.0MB,而我从中生成的 PDF 文件仅为 70KB。
2 条评论