RGB 轉 HSV 轉換器會在您輸入 0 到 255 的整數紅、綠、藍色通道後,回傳以 0–360 度圓圈表示的色相,以及以百分比表示的飽和度與明度。標準 CSS 並未內建原生 hsv() 函式,因此您取得的數值通常會透過 HSL 轉換來繞送,或透過 JavaScript 更新頁面上的 CSS 自訂屬性來套用。輸出遵循 Android 顏色慣例:色相維持在 360 以下,飽和度與明度在格式化為百分比之前落在零到一區間內,而無彩色輸入會回傳飽和度為 0,並以 0 度作為色相的預設值。了解每個元件的意義、目的地期望的尺度,以及如何將數字套入對 CSS 友善的流程,才能讓這項轉換真正派上用場,而非僅供參考。數學本身相當直接:每個通道除以 255,最大值即為明度,最大值與最小值的差距構成飽和度的基礎,而兩個非最大通道的相對位置決定色相,接著再將任何負數角度調整到非負範圍。

rgb to hsv css code
RGB 轉 HSV 數值套用於 CSS 程式碼:轉換指南

轉換器回傳的內容

每個 HSV 元件描述同一顏色的不同軸向。色相將顏色定位在 0–360 度的色輪上,其中紅色從 0 開始,黃色為 60,綠色為 120,青色為 180,藍色為 240,洋紅為 300。飽和度衡量相對於最大通道,距灰色軸的距離,因此完全去飽和的顏色落在灰色軸上,而完全飽和的顏色則在相同明度下到達色輪邊緣。明度單純就是最大的標準化 RGB 通道,代表它追蹤的是最強的元件,而非感知亮度,也不能與 HSL 亮度或量測亮度互換。完整的 RGB 轉 HSV 色輪參考圖表會在這六個錨點之間的每個命名色相旁,配對一個範例色塊與對應的度數值,當轉換器輸出需要轉譯為固定色盤時相當實用。

轉換器另外會以兩位數小寫形式回傳來源 HEX 字串、以慣用 hsv(h, s%, v%) 標記法撰寫的標準化 HSV 三元組,以及一個會在通道變更時立即更新的視覺色塊。輸入在轉換後仍保持可見,讓您可以編輯單一通道並觀察三個 HSV 元件如何反應。實作方式會將每個通過驗證的 8 位元通道除以 255,計算出最大值、最小值與其差值,接著套用標準的最大通道分段色相公式,並將任何負值加 360 以維持度數為非負。用於驗證公式的黃金案例涵蓋六個主要與次要色輪位置、黑色以及中間灰,如此一來,任何格式正確的 0–255 輸入所產生的輸出,都落在經過校準的曲線上,而不是近似值。

五步驟將 RGB 轉為 HSV

  1. 開啟 RGB 轉 HSV 轉換器,以 0 到 255 的整數輸入紅、綠、藍色通道。小數、空欄位、負數以及超過 255 的數值會以明確錯誤訊息拒絕,而非默默四捨五入。
  2. 選擇「轉換為 HSV」。該工具會在瀏覽器本機執行運算,並以度數顯示色相、以百分比顯示飽和度、以百分比顯示明度,每個數值皆四捨五入至小數兩位以利閱讀。
  3. 以 hsv(h, s%, v%) 格式讀取標準化標記法,加上來源 HEX 字串與即時色塊。請在複製前確認目的地期望的是度數與百分比;若目的地期望零到一的小數,或 0–255 的精簡整數範圍,請在貼上前自行重新調整數值。
  4. 若三個通道皆相等,結果會回報飽和度為 0% 並以 0 度作為色相預設值,因為在該無彩色情況下色相並無視覺意義。請將此預設值視為輸入為灰色的旗標,而非精準的顏色讀數。
  5. 就地編輯任一通道,以比較三個 HSV 元件的變化。輸入在轉換後仍維持可見,讓您可以變更單一通道並比較三個 HSV 元件的反應,如此便能在不遺失原始輸入的情況下輕鬆調整讀數。

計算過程的樣貌

對於 RGB(255, 87, 51),逐通道的運算過程如下:將每個通道除以 255 得到 (1.00000, 0.34118, 0.20000)。最大值為來自紅色的 1.00000,最小值為來自藍色的 0.20000,差值為 0.80000。明度等於最大值,因此 V = 1.00000 → 100.00%。飽和度為差值除以最大值,因此 S = 0.80000 / 1.00000 = 0.80000 → 80.00%。紅色為最大通道,因此色相公式 H = 60 × ((G − B) / delta) 得出 60 × (0.14118 / 0.80000) = 60 × 0.17647 = 10.59 度。最後讀數為 hsv(10.59°, 80.00%, 100.00%),將這些數值貼回轉換器可重現該三元組的相同輸出。

在 CSS 程式碼中使用 HSV 數值

關鍵字「rgb to hsv css code」通常指向一個工作流程:由轉換器將數值送往可感知 CSS 的目的地,而非直接做為樣式表宣告。CSS 至今仍未公開原生的 hsv() 或 hsb() 函式,因此 HSV 數值幾乎都會在抵達串接樣式前先離開轉換器並重新調整形狀。設計師選擇 HSV 往往是想要色輪的感知軸向,但樣式表仍需要 CSS 顏色函式或字面 HEX 字串。

當目標是 CSS 相容顏色時,最簡單的做法是將 HSV 結果轉譯為 HSL,或保留原始的 RGB 三元組。HSL 亮度取的是標準化後最大與最小通道的平均值,而不是最大值;HSL 飽和度採用的公式也與 HSV 不同,在純黑、純白與純灰時為零。若設計上需要 CSS 顏色函式,請將同一 RGB 三元組送進 HSL 轉換器,而非將 HSV 的明度元件重新標示為亮度。兩者並不能互換,在相同數值位置會產生明顯不同的色調,這是將 HSV 讀數直接放進 hsl() 宣告時最常見的錯誤。

當專案確實需要 HSV 座標時,典型模式是將三個數值存放在 CSS 自訂屬性中,由 JavaScript 在互動時更新它們。色相滑桿將度數寫入 --brand-hue,飽和度滑桿將百分比寫入 --brand-s,明度滑桿將百分比寫入 --brand-v,同時透過一支小腳本套用接受這些元件的 CSS 色函式。只需要固定顏色的設計師,可以將 HSV 結果轉回 RGB,並直接貼上 rgb() 宣告。CSS 程式碼保持可攜性,而轉換器輸出則成為規劃步驟,而非字面上的樣式表語法。

對於以色相旋轉為核心的工作流程,單一 CSS 規則可以將色相自訂屬性乘上一個倍率,並透過 hsl() 傳結果,這在維持「將此顏色旋轉 N 度」之感知意圖的同時,仍保持在串接樣式之內。這是 HSV 感知軸向與 CSS 實際公開的顏色函式之間最簡潔的折衷,且除了將色相當作數字讀取外,無需對轉換器輸出做任何後處理。作為旋轉的來源三元組,原始 RGB 通道應透過 HSL 工具進行轉換,使飽和度與亮度軸向與樣式表所取用的宣告相符。

HSV 輸出慣例與尺度

慣例色相範圍飽和度範圍明度範圍常見使用者
度數與百分比0 ≤ H < 3600% 至 100%0% 至 100%RGB 轉 HSV 轉換器顯示、設計用選色器
零到一的小數0 ≤ H < 10 至 10 至 1著色器 uniforms、數學函式庫
精簡整數範圍0 至 179 或 0 至 2550 至 2550 至 255部分將 HSV 打包至 8 位元通道的影像處理工具組

轉換器顯示度數與百分比,因為這種格式最易於讀,以及對照色輪。當目的地是採用小數的圖形 API 時,請將每個百分比除以 100;顯示為 80.90% 的飽和度,於零到一 API 中約對應 0.809,明度亦適用相同換算方式。色相較為特殊,因為它在多數 API 中仍以度數表示;只有 OpenCV 系列與少數影像處理工具組會將其重新映射至 0–179 範圍,因此在假設使用不同色相尺度前,請先查閱目的地的文件說明。

R grDevices rgb2hsv 文件進行的獨立交叉檢驗證實,對於典型的 0–255 sRGB 輸入,標準的最大通道分段公式與該工具給出相同讀數。正是這種一致性,使轉換器輸出得以直接移轉至 R、搭配 matplotlib.colors.rgb_to_hsv 的 Python,或著色器程式碼,而不必手動重新計算。顯示至小數兩位是出於可讀性的選擇;內部結果在格式化前仍是未經四捨五入的 JavaScript 數值,因此所顯示的兩位小數反映的是呈現精度,並非未經四捨五入的內部運算結果。

Achromatic Inputs and Channel Limits

The strict input boundary matters for CSS workflows because a single typo can quietly shift a color. Decimal values, empty fields, negative numbers, and values above 255 are rejected with an explicit error rather than being clamped, so a channel typed as 25.5 produces no result and the operator has to fix it before any HSV reading is generated. This is useful when the source is an 8-bit RGB code from a design asset: the error guards against a plausible but different color being silently produced from an invalid input.

Achromatic inputs — those with equal red, green, and blue channels — return saturation of 0% and a placeholder hue of 0 degrees. The choice matches the Android Color convention and the behavior of most color pickers, and it exists because hue has no visual meaning on the gray axis. Any nonzero hue on an achromatic input would be arbitrary, and downstream code that branches on "is this color saturated?" can use the saturation of 0 as the unambiguous achromatic flag. The HEX string is still produced in that case so the gray value can be copied into CSS unchanged.

Alpha is deliberately outside the calculation because transparency does not change the RGB-to-HSV reading for the underlying three channels. Wide-gamut color spaces such as Display P3 are also outside the scope; the converter assumes an sRGB-style triplet, and a color profile embedded in an image asset will not be honored. When those cases arise, decode the source through a color-managed pipeline first and then feed the resulting 0–255 sRGB channels into the converter, or compare the result against a color picker that knows the destination gamut. The tool is best understood as a defined coordinate transformation rather than a perceptual recommendation: it reports numbers, not names, not readability, and not preferred pairings. When the next step is a foreground-and-background pair, the HSV numbers say nothing about readability; use an RGB to HSV accessibility contrast workflow rather than inferring it from the converted values alone.