使用Scribus的PythonScripter功能开发显示RGB色谱的3D立方体。今年夏天,当我决定玩转色彩时,我突然想到,颜色通常是在色轮上描绘的。这些色调通常使用颜料而不是灯光,您会失去任何颜色亮度或光度变化的感觉。作为色轮的替代方案,我想在立方体的表面使用一系列图形来显示RGB光谱。颜色的RGB值将显示在具有X、Y、Z轴的3D图形上。例如,一个平面将B(蓝色)保持为0,其余轴将显示当我绘制R(红色)和G(绿色)的值从0到255时发??生的情况。事实证明,这使用Scribus及其PythonScripter功能并不难实现。我可以创建RGB颜色,制作显示颜色的矩形,并以二维方式排列它们。我决定将颜色值的间隔设置为5,并以5个点(pt)绘制矩形。因此,对于每个2D图,我将使用大约250种颜色,立方体的一侧有250点(pt),即3.5英寸。我使用以下Python代码完成了绿-红地图任务:x=300y=300r=0g=0b=0ifscribus.newDoc(scribus.PAPER_LETTER,(0,0,0,0),scribus.PORTRAIT,1,scribus.UNIT_POINTS,scribus.NOFACINGPAGES,scribus.FIRSTPAGERIGHT):whiler<256:whileg<256:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果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+5g=0r=r+5y=y–5这个脚本从300,300处开始绘制图形,大约是一张美国信纸大小的纸的水平中心,大致垂直三分之一从上到下的方式;这是图像的原点,然后它沿X轴(绿色值)水平构建图形,然后返回到Y轴,向上移动5个点,并绘制下一条矩形线。红绿图这看起来很简单;我只需要调整数字来绘制立方体的另一面。但这不仅仅是再画两张图,一张是蓝绿色,另一张是红蓝色。我想创建一个展开的立方体,以便我可以打印它,将其切开,然后折叠以创建RGB3D视图。所以下一部分(下一页)的原点(黑角)需要在左上角,水平方向为绿色,垂直方向为蓝色。“调整数字”最终或多或少地反复试验以获得我想要的东西。创建第二个图后,我需要第三个图,它是红蓝色的,原点在左上角,红色向左递增,蓝色向左递减。这是最终效果图:RGB立方体的前半部分当然,这只是立方体的前半部分。我需要做一个类似的形状,除了对于高值原点应该是白色(而不是黑色)。这是我希望自己更聪明的时候之一,因为我不仅需要制作一个相似的整体形状,而且我需要以镜像方式与第一个形状交互(我认为)。有时,反复试验是您唯一的朋友。结果是这样的;我使用了一个单独的脚本,因为在美国信纸大小的页面上没有足够的空间容纳两种模式。RGB立方体的下半部分现在,该使用打印机了!在这里,您可以看到彩色打印机如何处理RGB颜色到CMYK颜色的转换并打印颜色密集的空间。接下来,朋友们,是剪切和粘贴时间了!我可以使用胶带,但我不想改变表面的外观,所以我在切割时在两侧留了一些空间,这样我就可以把它们粘在里面。根据我的经验,在复印纸上打印会产生一些不需要的皱纹,因此在我的复印纸原型完成后,我将立方体打印在较厚的哑光纸上。RGB立方体请记住,这只是RGB空间边界的视图;更准确地说,你必须制作一个可以在中间切片的实心立方体。例如,这里有一片蓝色=120的实心RGB立方体切片。RGB立方体切片***,我在做这个项目时玩得很开心。如果您也想参与其中,这里有两个脚本。这是前半部分:#!/usr/bin/envpython#black2rgb.py"""Createsone-halfofRGBcubewithBlackatorigin"""importscribusx=300y=300r=0g=0b=0ifscribus.newDoc(scribus.PAPER_LETTER,(0,0,0,0),scribus.PORTRAIT,1,scribus.UNIT_POINTS,scribus.NOFACINGPAGES,scribus.FIRSTPAGERIGHT):当r<256:而g<256:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果newcolor=='0_0_0':newcolor='Black'scribus.defineColorRGB(newcolor,r,g,b)rect=scribus.createRect(x+g,y,5,5)scribus.setFillColor(新颜色,矩形)scribus.setLineColor(新颜色,矩形)g=g+5g=0r=r+5y=y-5r=0g=0y=305whileb<256:whileg<256:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果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+5g=0b=b+5y=y+5r=255g=0y=305x=39b=0同时b<256:whiler>=0:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果newcolor=='0_0_0':newcolor='Black'scribus.defineColorRGB(新颜色,r,g,b)rect=scribus.createRect(x,y,5,5)scribus.setFillColor(newcolor,rect)scribus.setLineColor(newcolor,rect)r=r-5x=x+5b=b+5x=39.5r=255y=y+5scribus.setRedraw(True)scribus.redrawAll()后半部分:#!/usr/bin/envpython#white2rgb.py"""创建二分之一原点为白色的RGB立方体"""导入scribusx=300y=300r=255g=255b=255ifscribus.newDoc(scribus.PAPER_LETTER,(0,0,0,0),scribus.PORTRAIT,1,scribus.UNIT_POINTS,scribus.NOFACINGPAGES,scribus.FIRSTPAGERIGHT):当g>=0:当r>=0:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果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-5r=255g=g-5y=y复制代码-5r=255g=255y=305whileb>=0:whiler>=0:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果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-5r=255b=b-5y=y+5r=255g=0y=305x=39b=255whileb>=0:whileg<256:newcolor=str(r)+'_'+str(g)+'_'+str(b)如果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+复制代码5g=0b=b-5y=y+5scribus.setRedraw(True)scribus.redrawAll()因为我创建了很多颜色,当看到Scribus文件比我用它创建的PDF大得多时,我'例如,当我的ScribusSLA文件为3.0MB,而从中生成的PDF只有70KB时,我并不感到惊讶。
