Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Python和Scribus制作RGB立方体【Programming(Python)】

使用Python和Scribus制作RGB立方体【Programming(Python)】

作者头像
Potato
修改于 2019-12-02 03:22:22
修改于 2019-12-02 03:22:22
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

使用Scribus的Python Scripter功能创建一个显示RGB色谱图的3D立方体。

图片来源:Opensource.com
图片来源:Opensource.com

当我决定今年夏天想玩彩色游戏时,我想到了通常在色轮上描绘色彩的事实。 通常是颜料颜色而不是光,并且您对颜色亮度或亮度的变化没有任何感觉。

作为色轮的替代方案,我想到了使用一系列图形在立方体表面上显示RGB光谱的想法。 RGB值将在带有X轴,Y轴和Z轴的三维图形上显示。 例如,一个曲面将B(或蓝色)保持为0,其余的轴将显示当我绘制R(红色)和G(绿色)的颜色(从0到255)时所发生的情况。

事实证明,使用Scribus及其Python Scripter功能并不是很难。 我可以创建RGB颜色,制作显示颜色的矩形,然后以2D格式排列它们。 我决定对颜色进行5个值的跳跃,并制作一个在侧面测量5个点的矩形。 因此,对于每个2D图形,我将制作约250种颜色,而该立方体将在一侧测量250个点,即3.5英寸。

我使用以下Python代码来完成Green-Red图形的任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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处开始图形结构,该结构水平位于美国信纸大小页面的中间,大约从顶部向下三分之一。 这就是图的原点。 然后,它沿X轴(绿色值)水平构建图形,然后返回到Y轴,在页面上跳5点,并绘制另一条矩形。

看起来很简单; 我只是摆弄数字,换另一边。 但这不仅仅是制作另外两个图形的问题,一个图形是蓝绿色的,另一个图形是红蓝色的。 我打算创建一个展开的立方体,以便可以打印,切割,折叠并创建RGB的3D视图。 因此,下一部分(下一页)需要在左上角具有原点(黑色角),水平绿色和垂直蓝色向下增加。

“摆弄数字”最终或多或少地经过反复试验才能得到我想要的。 创建第二张图之后,我需要第三张图(对于Red–Blue),其原点位于左上角,其中Red向左增加,Blue向下方增加。

当然,这只是该多维数据集的前半部分。 我需要做出类似的形状,只是原点应该是白色(而不是黑色)以表示较高的值。 这是我希望变得更聪明的时候,因为我不仅需要做出相似的整体形状,而且还需要以镜像方式与第一个形状进行交互(我认为)。 有时,反复试验是您唯一的朋友。

这是怎么出来的; 我使用了一个单独的脚本,因为在美国字母大小的页面上没有足够的空间来容纳它们:

现在,打印机已启动! 在这里,您可以了解彩色打印机在将RGB转换为CMYK方面的表现以及打印色彩密集空间的其他方面的性能。

接下来,男孩和女孩,这是剪切粘贴的时间! 我可以使用胶带,但是我不想改变表面的外观,因此在切割时我在侧面留了一些标签,以便可以将它们粘在里面。 根据经验,我可以说在复印纸上打印时会出现一些不希望有的皱纹,因此在复印纸原型制作完成后,我在较重的纸张上打印了立方体,并进行了磨砂处理。

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

最后,我很高兴做这个项目。 如果您想参加,请使用以下两个脚本。这些脚本需要Scribus 1.5.x,它提供了defineColorRGB()函数。

这是前半部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #!/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()

这是下半部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #!/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。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
151.HarmonyOS NEXT系列教程之3D立方体旋转轮播案例讲解之顶部搜索栏实现
全栈若城
2025/03/19
960
6.5编程实例-立方体透视投影
GLint winWidth = 600, winHeight = 600; //设置初始化窗口大小
步行者08
2018/10/09
9600
贪吃蛇
贪吃蛇真正实现的核心代码也就100来行,为了搞一些花里胡哨的东西,我硬是将代码弄成了300多行,但效果是,这游戏还挺好玩的。
DeROy
2020/05/12
9360
贪吃蛇
深入剖析Python最强大图片处理模块---Pillow
Pillow作为一个图片模块。可谓是真的简便强大,它的前身是PIL,后来将他取代,现在的pillow 可谓是一家独大,好了,让我们来看看他的具体用法。
Python进阶者
2021/04/19
1.1K0
深入剖析Python最强大图片处理模块---Pillow
EasyX图形库学习(一)
EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。
走在努力路上的自己
2024/02/03
1K0
EasyX图形库学习(一)
太阳系行星运行轨道图,C语言,源代码分享
1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件
命运之光
2024/03/20
4080
太阳系行星运行轨道图,C语言,源代码分享
【精选】适合初学者小游戏井字棋(三子棋)(C语言),Easyx图形库应用+源代码分享
1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件
命运之光
2024/03/20
5070
【精选】适合初学者小游戏井字棋(三子棋)(C语言),Easyx图形库应用+源代码分享
由RGB到HSV的转换详解
在图像处理中,最常见的就是RGB色彩模型。在RGB模型中,每种颜色出现在红、绿、蓝的原色光谱分量中。该模型基于笛卡尔坐标系。如图1所示,RGB原色值位于3个角上;二次色青色,深红色和黄色位于另外三个角上,黑色位于原点处,白色位于里原点最远的角上。
FPGA开源工作室
2020/02/25
3.5K0
CSS 还原拉斯维加斯球数字动画
实现一个 3D 立方体,相对另外一个文字和颜色都在随机变化的平面效果而言,属于非常非常简单的一步了。
Sb_Coco
2023/10/23
3520
CSS 还原拉斯维加斯球数字动画
【精选】适合初学者小游戏,Easyx图形库运用,跳转页面,窗口句柄简单应用,C语言
一、项目环境 1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件
命运之光
2024/03/20
4540
【精选】适合初学者小游戏,Easyx图形库运用,跳转页面,窗口句柄简单应用,C语言
16 Python 基础: 重点知识点--Pygame的基础知识梳理
本文首发于腾讯云+社区,也可关注微信公众号【离不开的网】支持一下,就差你的关注支持了。
野原测试开发
2019/07/24
3.8K0
16 Python 基础: 重点知识点--Pygame的基础知识梳理
Python实现动态3D立方体:旋转的3D立方体动画
3D动画在数据可视化和图形学中具有重要意义,能够生动地展示复杂的三维结构和运动。在这篇博客中,我们将使用Python来实现一个动态旋转的3D立方体。通过利用Matplotlib库,我们能够轻松创建和动画化3D立方体。
屿小夏
2024/09/25
4630
Python实现立方体纹理映射
本文要点在于扩展库pyopengl的使用,接口与标准的OpenGL基本一致。 import sys from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import * from PIL import Image class MyPyOpenGLTest: #初始化OpenGL环境 def __init__(self, width = 640, height = 480, title = b'MyPyOpenGLTest')
Python小屋屋主
2018/04/16
1.4K0
Python实现立方体纹理映射
NDK OpenGL ES 3.0 开发(十五):立方体贴图(天空盒)
OpenGL ES 立方体贴图本质上还是纹理映射,是一种 3D 纹理映射。立方体贴图所使的纹理称为立方图纹理,它是由 6 个单独的 2D 纹理组成,每个 2D 纹理是立方图的一个面。
字节流动
2020/06/03
1.5K0
p5.js 3D图形-立方体
前面写了几篇 p5.js 文章 都还没涉及到3D图形,但其实 p5.js 是提供了基础的3D图形的。
德育处主任
2023/03/19
2.4K0
p5.js 3D图形-立方体
俄罗斯方块
俄罗斯方块游戏制作教程,一个我考虑了很久要不要发的项目,因为这个项目代码相对来说有点长,大概500行,最为致命的就是逻辑关系很复杂,想要用语言来表达很困难,最后就是文章太长了,5000字的正文啊,写的我手抽筋~
DeROy
2020/05/11
1.7K0
oblicubes包带你绘制立方体图
R语言数据分析指南
2023/08/18
2610
oblicubes包带你绘制立方体图
一篇文章教会你利用html5和css3实现3D立方体效果图
随着HTML5 CSS3的出现和发展,使得我们的网页可以实现更加复杂的效果,也使得我们的浏览体验更加丰富,所以今天我们将制作一个正方体的3D效果。
前端皮皮
2020/11/26
1.1K0
一篇文章教会你利用html5和css3实现3D立方体效果图
音视频知识体系(基础篇3)----图像颜色空间
我们从视频的信号表示方法开始讲起,逐步深入到视频压缩编码的原理。我们主要从下面几个要点来讲解或者加深记忆。
jerrypxiao
2021/02/04
2K0
“我要做太空人”----太空人表盘制作
有智能手表的人都知道,前段时间的“太空人表盘”非常火热。那么我们也可以自己动手来制作一款太空人表盘。
跋扈洋
2021/05/20
6202
推荐阅读
相关推荐
151.HarmonyOS NEXT系列教程之3D立方体旋转轮播案例讲解之顶部搜索栏实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验