RGBからOKLCHへ変換
RGBカラーのOKLCH座標を求めます。255, 87, 51は明度0.680358、彩度0.210012、色相33.691637°になります。見た目で均等に感じる段階のスケールやパレットを作れます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 抵抗(Ω)
- 255
- G
- 87
- B
- 51
- L
- 0.680358
- C
- 0.210012
- H
- 33.691637
- OKLCH色空間
- oklch(0.680358 0.210012 33.691637)
このRGBからOKLCHへの変換ツールは、一般的な3つのsRGBチャンネルを、知覚的に均等な円筒座標へ変換します。赤・緑・青に0から255の値を入力すると、OKLCHの明度、彩度、色相と、CSSで利用しやすい文字列を取得できます。計算は、sRGB伝達関数の復号、線形RGBからOKLabへの行列変換、OKLabからOKLCHへの円筒座標変換という決定的な手順で行います。値の欠落、有限でない数、不正な型、範囲外のチャンネルは、暗黙に切り詰めず、明確な検証エラーとして返します。
sRGB座標をOKLCHへ変換する理由
RGBはディスプレイが赤・緑・青の光をどのように混ぜるかを表しますが、各チャンネルの数値を同じ幅だけ変えても、人が感じる変化量は通常同じになりません。ある色域では20の増加が大きく見え、別の色域ではわずかな差にしか見えないことがあります。OKLabは、座標間の距離が知覚される色差により近づくよう設計されています。
OKLCHはOKLabを扱いやすい円筒座標に並べ替えます。明度は色の明るさ、彩度は無彩色軸からの距離、色相はその軸の周囲の角度を度数で示します。そのため、デザイントークンの段階作成、関連色の生成、パレット比較に便利です。
入力は0から255までの実際のsRGBチャンネルに限定し、小数も受け付けますが、16進数、割合、色名、広色域プロファイルは推測しません。色相は0以上360未満に正規化します。無彩色では色相が数学的に定義できないため、安定した決定的な規約として0を返します。
変換処理の計算方法
通常のsRGB値は伝達関数で符号化されているため、表示されているRGB数値にOKLab行列を直接適用することはできません。まず各チャンネルを255で割り、区分的なsRGB伝達関数で復号します。低い値には線形部分を、高い値にはべき関数を使います。
得られた3つの線形光成分に、OKLab定義の線形RGBからLMSへの固定行列を掛けます。各LMS成分の立方根を求め、2つ目の固定行列を適用すると、OKLab明度と反対色軸a、bが得られます。最後に、aとbのユークリッド長から彩度を、atan2から色相を計算し、ラジアンを度へ変換して正の円周上に正規化します。
明度は割合ではなく、sRGBではおおむね0から1となる標準OKLab尺度です。返されるoklch文字列にも同じ丸め済み値を使用します。
デザインやコードで安全に利用する方法
すべて必須で、有限かつ0から255までの範囲内でなければなりません。画像サンプリングや中間処理では8ビット整数以上の精度を保持する場合があるため、小数値も受け付けます。一方、数値文字列、NaN、Infinity、配列、オブジェクトはチャンネルとして受け付けません。
成功時には検証済みチャンネルを再掲し、l、c、hと簡潔なoklch文字列を返します。OKLCHは知覚的な編集に適していますが、彩度を上げたり明度を変えたりすると、対象ディスプレイや出力形式の色域外になる場合があります。
本ツールは入力されたsRGB色の座標を示すもので、色域マッピング、コントラスト検査、アルファ合成、プロファイル変換、アクセシビリティ認証は行いません。それぞれ専用ツールをご利用ください。ネットワーク、時計、乱数、可変状態を使わないため、同じ入力には常に同じ結果を返します。
活用例
デザイントークンの刷新
従来のRGBパレットをOKLCHへ変換してから、知覚的に整った明度と彩度の段階を設計できます。
パレット内の関係分析
RGBチャンネルの数値差を視覚的な距離と見なさず、明度・彩度・色相を比較できます。
CSSカラー値の準備
sRGBから安定したOKLCH文字列を作り、文書、試作、スタイルシート、トークン処理に利用できます。
よくある質問
受け付けるRGBの範囲はどこまでですか?
r、g、bの各チャンネルは0以上255以下の有限数である必要があります。整数と小数の両方を受け付けます。
OKLCHの明度は割合で返されますか?
いいえ。 lは標準OKLab数値尺度を使い、sRGBではおおむね0から1です。出力先が割合表記を要求する場合のみ100倍してください。
灰色、黒、白の色相が0になるのはなぜですか?
彩度がほぼゼロの場合、色相は定義できません。nullや浮動小数点誤差由来の角度ではなく、決定的な規約として0度を返します。
色域マッピングも実行しますか?
いいえ。 色域内のsRGB色を変換するだけです。座標を編集した後は、制限のある出力空間向けに専用のマッピングツールをご利用ください。
小数を含むチャンネル値を入力できますか?
できます。各チャンネルは0〜255の範囲なら小数も使えます。16進コードやパーセント、色名は推測せず、値がない場合や範囲外の場合は切り詰めずに受け付けません。
結果はどのくらいの精度ですか?
明度・彩度・色相は小数点以下6桁で丸めて表示されます。安定して読みやすく、デザインシステムの作業には十分な精度です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/color/rgb-oklch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"r":255,"g":87,"b":51}'const res = await fetch("https://api.kit.forhosting.com/color/rgb-oklch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"r": 255,
"g": 87,
"b": 51
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/rgb-oklch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"r": 255,
"g": 87,
"b": 51
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/rgb-oklch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"r":255,"g":87,"b":51}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"r":255,"g":87,"b":51}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/rgb-oklch", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"r": 255,
"g": 87,
"b": 51
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.rgb_oklch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
変換処理の計算方法
結果はJSONの安定性と可読性を保ちながら十分な精度を得るため、小数第6位に丸めます。
デザインやコードで安全に利用する方法
r、g、bという数値フィールドを送信してください。APIの成功した処理は1項目あたり$0.002で、ブラウザー版はローカル実行です。
技術的な質問
API変換の料金はいくらですか?
成功したAPI処理は1項目あたり$0.002です。ブラウザー版はローカルで動作し、不正入力には型付きエラーを返します。