Python 可以在完整的 24 位元 RGB 色彩空間中產生任何顏色——全部 16,777,216 種組合——只需對三個色道各呼叫一次 random.randint(0, 255) 即可。這個範圍正好符合標準螢幕所能顯示的顏色,因此一個使用三個隨機整數的程式,所取樣的調色盤與你的螢幕所顯示的完全相同。從這三個數字出發,你可以將結果格式化為 CSS 用的 HEX 字串、影像編輯器用的 rgb() 多元組,或是人類可讀色彩工作用的 HSL 三元組。Python 的標準函式庫已內建完成這項工作所需的一切——無需第三方套件、無需 API 呼叫——程式碼通常只需三到四行。本指南將逐步介紹每種格式最短的程式碼路徑,然後展示當你只需要數值而不需要腳本時,更快速的瀏覽器方式。

在 Python 中隨機顏色常用於模擬資料、佔位頭像、圖表資料序列以及測試固件。在筆記型電腦中原型設計的設計師,會使用 matplotlib 散佈圖為每個資料系列指定一個隨機顏色;QA 工程師會用隨機十六進位字串為測試固件設定種子;前端開發人員則透過在畫布上繪製數十個隨機著色的元素,來對渲染路徑進行壓力測試。純粹為了尋找靈感——也就是只想取得一組全新的色票來打破創作瓶頸的那一刻——專門的隨機顏色工具會比開啟 REPL 來得更快。本文其餘部分將同時介紹這兩種選項,讓你能依當下需求挑選最合適的方式。

how to generate random colors in python
how to generate random colors in python

Python 內建的隨機顏色工具

最短的路徑從 Python 的 random 模組開始,該模組隨標準函式庫一同出貨。欲從完整的 16,777,216 色 RGB 空間中取樣,請對三個色道各呼叫一次 random.randint(0, 255)。由於該函式在兩端都是包含的,因此結果確實涵蓋螢幕像素所能容納的每一個值。

若在為測試資料設定種子時希望更均勻一些,secrets 模組透過 secrets.randbelow(256) 提供相同類型的數值,該函式使用作業系統的密碼學安全來源。這正是你在處理權杖 (token) 與鹽值 (salt) 時所需要的;對於設計與圖表工作,兩個模組的視覺結果完全相同,因此除非有安全性因素需要更換,否則優先使用 random。

另外還有兩個標準函式庫的輔助工具經常會用到:

  • colorsys.rgb_to_hls(r, g, b)——將 RGB 三元組(每個值介於 0 到 1 之間)轉換為色相-亮度-飽和度三元組。它會回傳 (h, l, s),其中 h 採 0–1 的比例,l 和 s 同樣也採 0–1 的比例。
  • 格式化字串,無論是 printf 風格('#%02X%02X%02X')或 f-string 風格(f'#{r:02x}{g:02x}{b:02x}'),用於將這些數字轉換為 CSS 與設計工具所預期的精確字串。

這三項工具結合起來,無需離開標準函式庫,就能涵蓋你將貼入實際工作的每一種顏色格式。

HEX、RGB 與 HSL 輸出的一行式寫法

從三個隨機整數出發,三行程式碼就能涵蓋常見的情況:

r, g, b = (random.randint(0, 255) for _ in range(3))

hex_color = f'#{r:02x}{g:02x}{b:02x}'

rgb_color = f'rgb({r}, {g}, {b})'

f-string 格式指定符 :02x 會將十六進位值轉為小寫,並將每個色道零填充至兩位數,這正是所有瀏覽器都能接受的格式。若你希望使用部分設計系統中常見的標準 #3A9D7F 樣式,可將格式字串中的小寫 x 換成大寫 X。

若要產生 HSL,請將同樣的三個整數送入 colorsys:

import colorsys

h, l, s = colorsys.rgb_to_hls(r/255, g/255, b/255)

hsl_color = f'hsl({round(h*360)}, {round(s*100)}%, {round(l*100)}%)'

此轉換採用的是標準的 RGB 轉 HSL 公式,而 f-string 中的乘數會將 colorsys 的 0–1 輸出,分別轉換為角度、飽和度百分比與亮度百分比——也就是 CSS 所預期的單位。

逐步範例

假設三個隨機整數的結果為 r = 100, g = 200, b = 150。逐步檢視每種格式:

  • HEX——每個值填充為兩位小寫十六進位數:64, c8, 96。結果:#64c896。
  • RGB——直接以逗號分隔貼入 rgb() 中的整數。結果:rgb(100, 200, 150)。
  • HSL——將每個色道除以 255,並餵入 colorsys.rgb_to_hls(100/255, 200/255, 150/255),該函式會回傳約略為 (0.417, 0.588, 0.476) 的值。色相 × 360 ≈ 150,飽和度 × 100 ≈ 48%,亮度 × 100 ≈ 59%。結果:hsl(150, 48%, 59%)。

這三個字串描述的都是同一個色票。挑選你的下游工具能接受的那種格式即可。

格式範例輸出最佳用途
HEX#64c896CSS、Figma、設計權杖 (design tokens)
RGBrgb(100, 200, 150)影像編輯器、畫布繪圖、繪圖函式庫
HSLhsl(150, 48%, 59%)將隨機結果微調至可用的色系

如何使用隨機顏色產生器產生隨機顏色

當你並未執行 Python 腳本時——例如你在設計工具中挑選配色靈感,或只是需要快速取得一兩個好顏色——隨機顏色產生器只需一次點擊就能完成相同的工作。它從同樣完整的 24 位元 RGB 空間中取樣,並同時以所有三種格式顯示每個結果,因此你可以複製所需的任何字串而無需重新輸入。

  1. 在任何現代瀏覽器中開啟隨機顏色產生器。
  2. 在數量欄位中設定你想要的顏色數量(1 到 100)。
  3. 點擊 Generate(產生)以產生一批全新的隨機顏色。
  4. 點擊任何色票即可複製其 HEX,或點擊 RGB 或 HSL 值以複製該格式。

你可以隨意重新抽取。由於來源是瀏覽器內建的隨機函式,每一批看起來都與上一批截然不同——這正是該工具有助於跳脫熟悉調色盤的原因。所有運算皆在本地進行——無需上傳,也無需帳號。

Python 程式碼或瀏覽器工具:哪一種適合你的工作

兩種方法皆從完全相同的 16,777,216 色空間中取樣,因此輸出品質相同。選擇取決於該任務所處的環境。

情境使用 Python使用隨機顏色產生器
需要 100 種以上嵌入模擬資料的顏色是——一行串列生成式勝過不斷點擊否——需要太多次個別點擊
為單一設計挑選靈感殺雞用牛刀——仍需肉眼判斷結果是——視覺化色票、一鍵複製
為確定性的測試套件設定種子是——設定 random.seed() 以獲得可重複的執行結果否——瀏覽器的抽樣無法設定種子
手寫 CSS 時的快速參考否——開啟 REPL 的成本過高是——保持分頁開啟並重新抽取
需要 RGB 或 HSL 與 HEX 並列輸出是——在一個多元組上使用三個格式化字串是——所有三種格式皆顯示於每個色票旁

一般性的區分原則是:若顏色存在於腳本之中,就在腳本內產生它。若顏色本身就是目的——而非執行程式碼的副作用——則開啟隨機顏色產生器並複製你所需的格式。

在隨機顏色承擔意義之前檢查對比

隨機的 HEX、RGB 與 HSL 值並不保證具有無障礙可及性。隨機前景與隨機背景之間的對比比例,涵蓋從 1:1 到 21:1 的完整範圍,大多數配對落在中間區段。WCAG 2.2 將 4.5:1 定義為內文 (body text) 的最低標準 (AA),並將 7:1 定義為更嚴格的 AAA 等級。每當顏色將承載文字、圖示或任何使用者必須閱讀的訊號時,在發布前請先透過對比檢查工具進行驗證。

一個實用的工作流程是:先使用隨機顏色產生器產生一批顏色,挑選出看起來有潛力的色票,再根據其實際背景逐一驗證。隨機顏色有助於打破習慣;但對於無障礙至關重要的 UI 來說,它們並非安全的預設值。

至於後續的步驟,有三個相關工具可完善整個工作流程:使用 HEX 轉 RGB 轉換器 將你複製的任何 HEX 轉換為精確的色道值;使用 調色盤產生器 從基礎顏色建構協調一致的調色盤;或使用 顏色對比檢查器 根據 WCAG AA 與 AAA 標準檢驗前景與背景的配對。它們結合起來,涵蓋了從隨機色票到實際設計中確認無障礙色彩的完整過程。

若你正在權衡各種選項,線上使用隨機顏色產生器是否安全? 對此有詳細說明。

若你正在權衡各種選項,隨機顏色產生器:16.7M 色,無需註冊 對此有詳細說明。