色空間 Poirson–Wandell opponent

色、パレット、グラデーション、画像を、あらゆる色空間で見る。画面から印刷まで、色選択から研究まで、1860年から2026年まで。

使い方

JavaScript

ライブラリ全体:221の色空間、gzipで71 kB。どの色空間からどの色空間へも、双方向に。

npm install color-space
import space from 'color-space'

space.rgb.oklch(255, 128, 0)      // → [0.732, 0.186, 53]
space.oklch.rgb(0.65, 0.1, 180)   // → [56.14, 162.97, 145.41]
space.oklch.range                 // [[0,1], [0,0.4], [0,360]]

あるいは色空間ひとつだけ。バンドルにはほかに何も入りません。

import oklch from 'color-space/oklch.js'

oklch.rgb(0.65, 0.1, 180)   // → [56.14, 162.97, 145.41]

型付き:TypeScript の型宣言がパッケージに同梱されています。ライブラリ全体にも、各色空間を単体で読み込む場合にも。

色空間とは何ですか?

色を表す座標系で、軸と範囲、そして数値を測定可能な光と結びつける規則からなります。人間の視覚は3種類の錐体細胞(S、M、L)による3色型なので、目に見えるあらゆる色を表すには少なくとも3つの座標が必要です。同じオレンジ色がrgb(255 128 0)、oklch(0.732 0.186 53)、XYZ [49, 36.7, 4.5]と表されます。パレットは選んだ少数の色、色空間はあらゆる色を書き表すための方法です。

カラーモデルと色空間の違いは何ですか?

カラーモデルは、色を表す成分を定めます。RGBは3つの原色、HSLは色相・彩度・明度、CMYKは4色のインクです。色空間はさらに原色、白色点、符号化のカーブを定め、数値の組が測定可能な1つの色に対応するようにします。そのため、rgb(255 0 0)はsRGB、Display P3、Adobe RGBで異なる赤を表します。同じモデルでも、色空間は異なります。

一般にはどちらも色空間と呼ばれ、CSSのcolor-mix(in hsl, …)やこのカタログでも同じ呼び方をしています。独自の基準をもたないモデルは、既存の色空間を基に定義できます。ここでのHSLとHSVは、CSSと同じくsRGBを基にしています。

実際にはどの色空間を使えばよいですか?

用途によります。

  • 画像の保存と共有:sRGB(Webの標準)
  • パレットやグラデーションのデザイン:OKLCH(数値を等間隔に変えると見た目も等間隔に変わる)
  • 光の計算(ブレンド、ぼかし、3D):リニアRGB
  • 映像の撮影とグレーディング:カメラのログ空間で撮り、Rec. 709かRec. 2100で納品
  • 2色の見た目の差の測定:CIELABまたはDIN99o

すべての色空間を目的別に見るには、カタログを用途でグループ化してください。

HSLの代わりに何を使えばよいですか?

OKLCHです。色相・クロマ・明度という3つのパラメーターはそのままで、明度が実際の明るさに対応します。HSLではL=50の黄色はL=50の青の約13倍の光を発するので、Lが等しくても明るさは等しくありません。OKLCHでは等しくなります。CSSはoklch()をネイティブにサポートしています。

hexをOKLCHに変換するには?

上部の色フィールドに、たとえば#ff8000と入力するか貼り付けます。ページ上のすべての色空間がその色を一度に表示します。OKLCHでは0.732、0.186、53で、CSSではoklch(0.732 0.186 53)と書きます。各詳細ページのcssタブでコピーできる形が得られ、コードではspace.rgb.oklch(255, 128, 0)です。

グラデーションの中間が濁るのはなぜですか?

ガンマ符号化されたsRGBで計算されるからです。この空間で2色の数値を平均すると、実際に光を混ぜた場合より暗く濁った光になります。OKLabで補間すればこれを避けられます。CSSではlinear-gradient(in oklab, red, blue)と書きます。各詳細ページのinterpolate行は、同じブレンドを2つの色空間で並べて描くので、選ぶ前に違いを確かめられます。

S-Log3などのカメラのログをRec. 709に変換するには?

お使いのカメラのログ空間(S-Log3、LogC4、Apple Logなど)を開きます。そのLUTブロックでRec. 709と編集ソフト(DaVinci Resolve、Premiere Pro、Final Cut Pro、OBS、ffmpegなど)を選ぶと、ブラウザが.cubeファイルを書き出します。トーンマッピングを含まない、色空間の変換だけを行うLUTなので、拡散白より明るいハイライトはクリップし、ルックはご自身で加えることになります。

「色域外」とはどういう意味ですか?

ある色空間では表せても、別の色空間やお使いの画面では表示できない色のことです。鮮やかなDisplay P3の緑はsRGBには存在せず、変換すると数値が有効範囲の外に出ます。アトラスではこれが見えるようにしています。現在の色の横の⚠は、選んだ「上限」の外にあることを示します。Altキーを押したまま平面やバーにポインタを置くと、そこの色にどの広い色域(P3、Rec. 2020)が必要かが表示されます。範囲外の区間は市松模様の上に薄く表示されます。

印刷が画面よりくすんで見えるのはなぜですか?

画面は光を発し、紙はインクが吸収しなかった光を反射します。紙の上のインクで出せる鮮やかな色は少なく、彩度の高いRGBの青・緑・赤はその外に出るため、くすんで印刷されます。製版では、印刷機と用紙に合わせて作られたICCプロファイル(欧州のコート紙ならFOGRA39、米国ならGRACoLなど)を通して変換します。このカタログのCMYKは、CSSがプロファイルなしのdevice-cmyk()に使う単純な式です。数値としては正しくても、印刷の校正にはなりません。

写真はどの色空間で書き出すべきですか?

Webや共有にはsRGBを使います。ファイルにプロファイルがなければ、ブラウザやスマートフォンはsRGBとみなすからです。Display P3は、プロファイルを埋め込んだままにしておけば、Appleや多くのAndroidの画面で鮮やかな色をより多く再現できます。プリントラボから求められたらAdobe RGBで渡します。ProPhoto RGBは16ビットでの編集用です。色域が非常に広いため、8ビットのファイルではバンディングが起きます。

変換は正確ですか?往復でデータは失われますか?

変換はルックアップによる近似ではなく閉じた式で、往復変換しても浮動小数点の誤差の範囲で元に戻ります。わずかな例外は該当箇所に記載しています。OSA-UCSには閉じた逆変換がなく、Munsellのような色票系は公表された等級のあいだを補間します。rgbの出力はクランプしません。sRGB外の色は0未満や255超の値で返るので、クランプは表示するときだけにしてください。

検証もしています。どの色空間も実装元の論文や規格にリンクし、値は重なる範囲でcolorjs.ioと、カメラのログはAcademy公式のACES変換と照合しています。何を何と照合したかは、公表された論文そのものに誤りがあった箇所も含めてformula-verification.mdに記録しています。

数値が他のライブラリと合わないときは、値の範囲を比べてください。多くのライブラリはすべてを0〜1に揃えますが、このライブラリは各色空間の慣例的な範囲(RGBは0〜255、Labの明度は0〜100、色相は0〜360)を保ちます。範囲はどのカードにも表示され、コードではspace.oklch.rangeです。

このうちCSSで書けるのはどれですか?

ネイティブに書けるのはrgb()、hsl()、hwb()、lab()、lch()、oklab()、oklch()、そしてDisplay P3、Adobe RGB、ProPhoto、リニアsRGB、XYZ(D65とD50)を表すcolor()です。CSSのrec2020は純粋な2.4ガンマで、このカタログのRec. 2020が使うBT.2020のカーブではありません。同じ数値でも別の色を指します。各詳細ページのcssタブは現在の色をコピーできる形で書き出します。CSSにない色空間は、代わりにICCプロファイルかLUTとして提供されます。

色覚異常のある人には、色はどう見えますか?

表示を開き、色覚で1型色覚(赤)、2型色覚(緑)、3型色覚(青)のいずれかを選びます。選んだ色覚での見え方でカタログが再描画されるので、パレットの色どうしが見分けられるかを確かめられます。NEIの集計では、男性の約12人に1人が色覚異常です。

Pantone、NCS、RALはどこですか?

これらはライセンス製品です。色は公表された式ではなく、所有者が販売するデータで定義されています。実装できる公開の数式がなく、その表を再配布することも法的に認められません。数式が公開されている近縁の体系は収録しています。Munsell(1943年の修正マンセル値は公開されています)とRAL Design(CIELABで直接定義)です。数式が一度でも公表された体系なら、ここに収録します。足りないものを提案してください。

代替ツール

色変換ライブラリの比較。
ツール色空間カメラのログルマ・クロマsRGBツールキットサイズ速度ターゲット
color-space20531160–255
parse mix ΔE contrast CVD
62 kBJS, WASM, GL, LUT, ICC, OCIO, MCP, Figma, VS Code, CLI, web
culori30–10–1
parse mix gamut ΔE contrast CVD
23 kBJS
colorjs.io51––0–1
parse mix gamut ΔE contrast
34 kBJS, web
chroma-js11––0–255
parse mix ΔE contrast palettes
17 kBJS
@texel/color16––0–1
parse gamut ΔE
9 kBJS
colour-science1282460–1
ΔE CVD
––Python, LUT
ColorAide77––0–1
parse mix gamut ΔE contrast CVD palettes
––Python
colorspace (R)9––0–1
mix contrast CVD palettes
––R, web
OpenColorIO5711–0–1
gamut
––C++, Python, GL, LUT, ICC
Bruce Lindbloom22––0–1, 0–255
ΔE
––web
oklch.com9––0–255
parse gamut
––web

各プロジェクトのソース、パッケージ、ページに基づく(2026-10-18時点)。

コピーしました