」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 從打字機到像素:CMYK、RGB 和建立色彩視覺化工具的旅程

從打字機到像素:CMYK、RGB 和建立色彩視覺化工具的旅程

發佈於2024-11-08
瀏覽:323

當我還是個孩子的時候,我出版了一本關於漫畫的粉絲雜誌。那是在我擁有計算機之前很久——它是用打字機、紙和剪刀創建的!

粉絲雜誌最初是黑白的,在我的學校複印的。隨著時間的推移,隨著它取得了更大的成功,我能夠負擔得起帶有彩色封面的膠印!

然而,管理這些顏色非常具有挑戰性。每個封面必須列印四次,每種顏色列印一次:青色、洋紅色、黃色和基底色(黑色)——縮寫為 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]刪除
最新教學 更多>
  • 透過「jQuery 快速入門」課程釋放您的 Web 開發技能
    透過「jQuery 快速入門」課程釋放您的 Web 開發技能
    您準備好提升您的 Web 開發專業知識並釋放最受歡迎的 JavaScript 庫 jQuery 的強大功能了嗎? LabEx 提供的「jQuery 快速入門」課程就是您的最佳選擇。這個綜合性的程式將引導您了解 jQuery 的基礎知識,使您能夠操作文件物件模型 (DOM) 並為您的網頁注入迷人的互動...
    程式設計 發佈於2024-12-23
  • 如何在 MySQL WHERE IN() 子句中處理具有多個值的記錄?
    如何在 MySQL WHERE IN() 子句中處理具有多個值的記錄?
    MySQL IN () 運算子查詢MySQL 資料庫時,WHERE IN () 運算子常用於根據特定條件擷取行列中的值。例如,以下查詢從「table」表中擷取「id」列與任意值(1、2、3、4) 相符的所有行:SELECT * FROM table WHERE id IN (1,2,3,4);但是,...
    程式設計 發佈於2024-12-23
  • 如何根據與特定值相符的列值過濾數組行?
    如何根據與特定值相符的列值過濾數組行?
    基於列值包含的行子集考慮一個具有多個列的數組$arr1 和第二個平面數組$arr2 ,包含特定的id 值。目標是過濾 $arr1 以僅保留列值與 $arr2 中的任何值相符的行。 先前使用篩選函數或 array_search 的嘗試已證明不成功。一個實用的解決方案涉及使用本機 PHP 函數 arra...
    程式設計 發佈於2024-12-23
  • 如何使用 DockerMake 將多個 Docker 映像合併為一個映像?
    如何使用 DockerMake 將多個 Docker 映像合併為一個映像?
    組合多個 Docker 映像Docker 不直接支援將多個 Docker 映像組合成一個統一的映像。但是,可以使用第三方工具來促進此過程。 DockerMake 就是這樣一個工具,可以創造複雜的映像繼承場景。 使用 DockerMake 組合映像DockerMake 透過使用 YAML 檔案定義之間...
    程式設計 發佈於2024-12-23
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-23
  • OpenCV 的 `cvWaitKey()` 函數如何管理使用者互動和視窗事件?
    OpenCV 的 `cvWaitKey()` 函數如何管理使用者互動和視窗事件?
    探討OpenCV 的「cvWaitKey()」功能OpenCV 的「cvWaitKey()」函數在管理使用者互動方面發揮至關重要的作用OpenCV 窗口。讓我們深入研究其內部運作方式和典型用例:功能概述cvWaitKey(x) 提供兩個主要功能:按鍵偵測:它等待使用者在OpenCV 視窗上按指定的持...
    程式設計 發佈於2024-12-23
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-23
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-23
  • PHP 中的 `echo`、`print`、`print_r` 和 `var_dump` 有什麼不同?
    PHP 中的 `echo`、`print`、`print_r` 和 `var_dump` 有什麼不同?
    PHP中Echo、Print、Print_r和Var_dump的差異許多PHP開發者經常使用echo和print_r來輸出資料。然而,令人驚訝的是,印刷品很少被使用。儘管它們有明顯的相似之處,但這些語言結構具有不同的特徵。 Echo 與 Printecho 和 print 都主要用於顯示字串。然而,...
    程式設計 發佈於2024-12-23
  • 如何使用 jQuery 高效創建 DOM 元素?
    如何使用 jQuery 高效創建 DOM 元素?
    使用jQuery 創建DOM 元素如果您希望增強JavaScript 程式碼,您會對利用jQuery 的功能來簡化DOM 操作感到好奇. jQuery 確實提供了建立DOM 元素的替代方法,正如您在$.create("div")中註意到的那樣。然而,這種方法不是 jQuery 核...
    程式設計 發佈於2024-12-23
  • 如何在 Eclipse 中輕鬆配置 Java 專案的本機庫路徑?
    如何在 Eclipse 中輕鬆配置 Java 專案的本機庫路徑?
    Eclipse 中的Java 庫發現困境:揭開秘密許多開發人員都在努力解決在Eclipse 中配置Java 庫路徑的艱鉅任務,當應用程式執行由於缺少.dll/.so/.jnilib 檔案而停止時,會遇到挫敗感。針對特定運行配置調整 VM 參數的傳統方法通常被證明是無效的。 相反,關鍵在於 Eclip...
    程式設計 發佈於2024-12-23
  • CSS 樣式只能設定半個字元嗎?
    CSS 樣式只能設定半個字元嗎?
    CSS 只能套用於半個字元嗎? 許多人尋求一種技術來僅設計半個字符的樣式,因為例如,通過使一半透明。然而,儘管搜尋了諸如「將 CSS 應用到字元的 50%」之類的方法,但到目前為止,還沒有找到運氣。話雖這麼說,是否存在 CSS 或 JavaScript 解決方案,還是求助於圖像是唯一的選擇? 新穎的...
    程式設計 發佈於2024-12-23
  • 如何在 Ubuntu 10.04 LTS 上安裝用於 C++ 開發的 OpenSSL 函式庫?
    如何在 Ubuntu 10.04 LTS 上安裝用於 C++ 開發的 OpenSSL 函式庫?
    在Ubuntu 10.04 LTS 上安裝OpenSSL 庫以進行C 開發正如您在詢問中提到的,使用OpenSSL 構建代碼需要適當的庫。在您的情況下,您遇到了指示 OpenSSL 庫檔案遺失的錯誤。本指南將透過解釋如何在 Ubuntu 10.04 LTS 上安裝所需的 OpenSSL C 程式庫來...
    程式設計 發佈於2024-12-23
  • 如何在 WordPress 中處理帶有 IN() 條件的準備語句?
    如何在 WordPress 中處理帶有 IN() 條件的準備語句?
    在 WordPress 中使用 IN() 條件處理準備語句WordPress 提供準備語句來防止 SQL 注入攻擊並提高查詢效能。但是,在字串中使用具有多個值的 IN() 條件可能會帶來挑戰。 問題陳述:考慮以下情況:$villes = '"paris","fes&qu...
    程式設計 發佈於2024-12-23
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-23

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3