”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 从打字机到像素:CMYK、RGB 和构建色彩可视化工具的旅程

从打字机到像素:CMYK、RGB 和构建色彩可视化工具的旅程

发布于2024-11-08
浏览:796

当我还是个孩子的时候,我出版了一本关于漫画的粉丝杂志。那是在我拥有计算机之前很久——它是用打字机、纸和剪刀创建的!

粉丝杂志最初是黑白的,在我的学校复印的。随着时间的推移,随着它取得了更大的成功,我能够负担得起带有彩色封面的胶印!

然而,管理这些颜色非常具有挑战性。每个封面必须打印四次,每种颜色打印一次:青色、品红色、黄色和基色(黑色)——缩写为 CMYK。

这意味着我必须提供四张单独的纸,每张都用黑色墨水打印,但对应于特定的颜色。

这是我发表的其中一期:

From Typewriters to Pixels: A Journey with CMYK, RGB, and Building a Color Visualizer

您在上图中看到的所有黄色都是我用黑色墨水在“黄色”纸上手绘的。对于肤色,我使用了一种叫做“光栅点”的东西。您可以购买带有不同密度黑点的床单。你可以剪下这些点并将它们应用到——在本例中,应用到“红色”纸上。

我在一张灯台上工作——一张带有内置照明的玻璃顶绘图桌——这样我就可以透过各种纸张看到它们,同时正确对齐它们。

非常耗时,但它激发了人们对理解颜色的终生兴趣——以及打印颜色和屏幕颜色之间的巨大差异!

虽然 CMYK 仅限于四种颜色,但它仍然相对容易掌握。我们都曾在纸上使用过彩色铅笔,并且对颜色如何混合有直观的感觉。 CMYK 是一种减色颜色模型。你从一张白纸开始,当你添加更多墨水时,你实际上是在减去光线。组合所有颜色会让你走向黑色。如果不涂任何墨水,纸张会保持白色,因为它会反射所有光线。

当我拿到第一台电脑时,我必须了解 RGB,它与 CMYK 非常不同。 RGB 是一种用于数字屏幕的加法颜色模型。在这里,您正在混合光线本身 - 添加更多光线会使颜色更明亮,并使您接近白色。关闭所有RGB灯(R=0,G=0,B=0),屏幕变黑,因为没有光发出。

当时作为一名图形设计师,您必须校准屏幕,因为您在屏幕上看到的颜色和在打印中看到的颜色通常非常不同!


可视化 RGB

RGB代表三种光源:红、绿、蓝。当灯关闭时,其值为0;当它完全上时,其值为255。当这些灯重叠时,它们会产生不同的颜色。

为了更好地理解 RGB 的工作原理,让我们构建一个小工具:

From Typewriters to Pixels: A Journey with CMYK, RGB, and Building a Color Visualizer


超文本标记语言

R G R B G B

风格

首先,我们创建一个 9x8 的网格:

.rgb {
  all: unset;
  aspect-ratio: 9 / 8;
  container-type: inline-size;
  display: grid;
  font-size: 1.75cqi;
  grid-template-columns: repeat(9, 1fr);
  grid-template-rows: repeat(8, 1fr);
  width: 100%;
}

这是一个不寻常的尺寸,但那是因为我们的 R、G 和 B 圆是 5x5 并且 重叠

.r, .g, .b {
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  display: grid;
  font-size: 5cqi;
  mix-blend-mode: difference;
}

.r、.g 和 .b 的 CSS 为:

.r {
  background-color: rgb(var(--r), 0, 0);
  grid-area: 1 / 3 / 6 / 8;
}

.g {
  background-color: rgb(0, var(--g), 0);
  grid-area: 4 / 1 / 9 / 6;
}

.b {
  background-color: rgb(0, 0, var(--b));
  grid-area: 4 / 5 / 9 / 10;
}

我最近经常使用网格区域。它允许您将网格项放置在非常特定的位置:

行开始/列开始/行结束/列结束

如果启用开发工具的网格可视化工具

,则更容易将其可视化

From Typewriters to Pixels: A Journey with CMYK, RGB, and Building a Color Visualizer

您注意到三个 CSS 自定义属性 --r、--g 和 --b 了吗?我们将在一个小的 JS 片段中更新它们:

const rgb = document.querySelector('.rgb');
rgb.addEventListener('input', e => {
  const N = e.target;
  document.body.style.setProperty(`--${N.name}`, N.value);
})

基本上就是这样。我添加了一些 元素和细微的调整……但我几乎忘记提及 使可视化工具正常工作的最重要的一行

混合混合模式:差异

在这里阅读相关内容 - 循环浏览所有模式非常有趣。


演示

这是一个 Codepen。单击并编辑 R、G 和 B 下面的数字,注意页面背景和所有三个圆圈的重叠部分如何变化。

版本声明 本文转载于:https://dev.to/madsstoumann/from-typewriters-to-pixels-a-journey-with-cmyk-rgb-and-building-a-color-visualizer-484b?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在Java中如何为PNG文件添加坐标轴和标签?
    在Java中如何为PNG文件添加坐标轴和标签?
    如何用java 在现有png映像中添加轴和标签的axes和labels如何注释png文件可能具有挑战性。与其尝试可能导致错误和不一致的修改,不如建议在图表创建过程中集成注释。使用JFReechArt import java.awt.color; 导入java.awt.eventqueue; 导入...
    编程 发布于2025-04-27
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-27
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-27
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-27
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-04-27
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-04-27
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-27
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-04-27
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-04-27
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-04-27
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-04-27
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-04-27
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-27
  • Python不会对超范围子串切片报错的原因
    Python不会对超范围子串切片报错的原因
    在python中用索引切片范围:二重性和空序列索引单个元素不同,该元素会引起错误,切片在序列的边界之外没有。这种行为源于索引和切片之间的基本差异。索引一个序列,例如“示例” [3],返回一个项目。但是,切片序列(例如“示例” [3:4])返回项目的子序列。索引不存在的元素时,例如“示例” [9] ...
    编程 发布于2025-04-27
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-27

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3