RGBからXYZへの変換
sRGBカラーのCIE 1931 XYZ値を求めます。オレンジの255, 128, 0は0〜100の目盛りでX 48.96429558、Y 36.70460115、Z 4.50627447です。Labへの変換やプロファイルの比較の出発点になります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 抵抗(Ω)
- 255
- G
- 128
- B
- 0
- X
- 48.96429558
- Y
- 36.70460115
- Z
- 4.50627447
- 白色点
- D65
このRGBからXYZへの変換ツールは、sRGBの赤・緑・青チャンネル値をCIE 1931 XYZ三刺激値へ変換します。各チャンネルを検証し、非線形なsRGB伝達曲線を取り除いたうえで、2度視野の標準観測者に対応するD65標準変換行列を適用します。X、Y、Zは一般的な0–100スケールで返されるため、色彩科学の計算、プロファイル比較、CIE L*a*b*などへの変換にそのまま活用できます。
有効なsRGBカラーを入力してください
赤、緑、青の各チャンネルを0から255までの整数で指定してください。これはCSSのrgb()カラーや、画面表示を前提とする一般的な画像データで使われる通常のsRGBチャンネル値です。XYZの結果は色全体の光の寄与を組み合わせて表すため、3つの項目はすべて必須です。
この変換ツールは、チャンネルの欠落、小数、数値以外の値、許容範囲外の数値を、暗黙に切り詰めたり推測したりせずエラーとして扱います。この厳密な動作は自動処理で特に役立ちます。無効な入力から一見もっともらしい誤った座標を生成せず、明確な入力エラーを返すためです。
たとえば純粋な赤はr 255、g 0、b 0と入力し、中間の無彩色グレーでは3チャンネルすべてに同じ数値を指定します。入力は標準sRGBとしてのみ解釈されます。Adobe RGB、Display P3、ProPhoto RGB、カメラ固有のRGB、またはプロファイルが不明な値には、それぞれの色空間専用の行列と伝達曲線が必要です。
これらをsRGBとして入力しないでください。
ガンマ線形化と変換行列の仕組み
保存されたsRGB値は線形ではありません。表示装置と視覚的な精度を効率よく扱うための伝達曲線で符号化されています。行列演算は線形光量に対して行う必要があるため、このツールは最初に各チャンネルを255で割り、sRGBの逆コンパンディング関数を適用します。
小さいチャンネル値には線形分岐を使い、それより大きい値にはsRGBで定義された2.4乗の分岐を使います。得られた線形の赤、緑、青成分に、sRGBからXYZへ変換する標準の3行3列行列を掛けます。この行列は、CIE 1931の2度視野標準観測者とD65基準白色に対するsRGB原色を表します。
Xはおおむね赤方向に重みを持つ刺激成分、Yは相対輝度に対応し、Zは青方向に強く重み付けされます。ただし、いずれもRGBチャンネルの単なる名称変更ではありません。ガンマ除去と行列変換を分けることが重要です。
符号化済みの0–255値へ行列を直接適用すると、特に中間調や暗い色で系統的に誤った座標になります。
XYZの結果を読み取り活用する方法
応答には0–100スケールのX、Y、Zに加え、白色点、観測者、スケールが明示されます。そのため、後続のコードで規約を推測する必要はありません。sRGBの基準白色はおよそX 95.047、Y 100、Z 108.883です。
したがって、スケール表示が0–100でもZが100を超えることは正当です。この表示は、基準白色のYを100とする一般的な正規化を示すものであり、すべての成分を100以下に制限する意味ではありません。XYZは中間の接続色空間としてよく使われます。
値を正規化してCIE L*a*b*へ進める、色度座標を求める、白色点を比較する、D65 XYZデータを明示的に要求するカラーマネジメント処理へ渡す、といった用途に利用できます。別の計算ツールやライブラリと比較する場合は、RGBプロファイル、観測者、基準白色、出力スケール、行列係数、丸め方法をご確認ください。
活用例
sRGBカラーをLAB変換用に準備
CIE L*a*b*の基準白色変換を適用する前の接続段階として、D65 XYZをご利用ください。
カラーライブラリの実装を検証
色処理コードの開発やテストで、既知のsRGBサンプルに対する決定論的な行列出力を比較できます。
測色座標を計算
ウェブカラーの各チャンネルを、輝度、色度、プロファイル解析に使える三刺激値へ変換します。
よくある質問
どのRGB色空間を使用しますか?
標準sRGB原色とsRGBの逆伝達曲線を使用します。Adobe RGB、Display P3、機器固有のRGB値は解釈しません。
どの白色点と観測者を使用しますか?
D65白色点とCIE 1931の2度視野標準観測者を基準とする行列を使用します。
Zが100を超えてもよいのはなぜですか?
一般的なスケールでは基準白色のYを100に正規化します。D65の基準白色ではZが約108.883になるため、100を超える値も有効です。
小数や範囲外のRGBチャンネルを入力できますか?
いいえ。 各チャンネルは0から255までの整数である必要があります。
Adobe RGBやDisplay P3の値も入力できますか?
入力しないでください。このツールは標準のsRGBとして計算します。ほかの色空間の値には、その色空間専用の変換行列とトーンカーブが必要です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/color/rgb-xyz \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"r":255,"g":128,"b":0}'const res = await fetch("https://api.kit.forhosting.com/color/rgb-xyz", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"r": 255,
"g": 128,
"b": 0
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/rgb-xyz",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"r": 255,
"g": 128,
"b": 0
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/rgb-xyz", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"r":255,"g":128,"b":0}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"r":255,"g":128,"b":0}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/rgb-xyz", 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": 128,
"b": 0
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.rgb_xyz",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
min_channel | 0 |
max_channel | 255 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
ブラウザーとAPIでは、同じ決定論的な計算が実行されます。
XYZの結果を読み取り活用する方法
結果はJSONの安定性を保ちつつ、通常の画面表示やレポートに十分以上の精度を残すため、小数点以下8桁に丸められます。
技術的な質問
変換料金はいくらですか?
このページのブラウザー変換は無料です。APIリクエストは1項目あたり$0.002です。