今年夏天,当我决定要玩转色彩时,我想到了颜色通常在色轮上描绘的事实。这通常是使用颜料颜色而不是光,而且你会失去对颜色亮度或光度变化的任何感知。
作为色轮的替代方案,我提出了一个想法,即使用一系列图形在立方体的表面上显示 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 处启动图形结构,这大约是美国 Letter 尺寸页面水平方向的中间,并且可能从顶部向下三分之一的位置;这是图形的原点。然后它沿 X 轴(绿色值)水平构建图形,然后返回到 Y 轴,在页面上向上跳 5 个点,并制作另一行矩形。

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

当然,这只是这个立方体的前半部分。我需要制作一个类似的形状,只不过原点应该是白色(而不是黑色)来表示高值。有时候我真希望自己更聪明一点,因为我不仅需要制作一个类似的整体形状,还需要以镜像的方式(我认为)与第一个形状对接。有时候,尝试和错误是你唯一的朋友。
这就是结果;我使用了单独的脚本,因为美国 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 条评论