色のコントラストを係数で調整
色の各チャンネルを中間グレー128から遠ざけてメリハリを出したり、近づけて落ち着かせたりできます。#3366ccに係数1.5をかけると#0d59f2になります。係数1なら何も変わりません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 色
- #3366cc
- 係数
- 1.5
- ミディアムグレー
- 128
- Hex
- #0d59f2
- 抵抗(Ω)
- 13
- G
- 89
中間灰まわりのコントラストは、HSLの明度を動かしたりガンマのべきを上げたりするのではなく、赤・緑・青の各チャネルを八ビットの中点である百二十八から引き離すか寄せる古典的な画像操作です。デザイナー、トークン作者、グラフィックスエンジニアは、色相環を回さず色を一枚の写真としても扱わずに、より強い、またはより平坦な見本が欲しいときにコントラスト係数を使います。本ツールはCSSのhex色と、ゼロから十までの閉区間にある有限の係数を受け取り、出力が中間灰に中間灰からの符号付き距離と係数の積を足したものであるというチャネルごとの規則を適用し、各チャネルをゼロから二百五十五の合法範囲にクランプして、調整後のhexとRGB整数を返します。係数が一なら見本は変わりません。係数がゼロなら全チャネルが中間灰に潰れます。一を超える値はコントラストを上げ、ハイライトやシャドウをクリップし得ます。
中間灰まわりのコントラストがRGBチャネルに与える効果
ハッシュ三・三・六・六・c・cのようなCSS hex色、または短い形のハッシュ三・六・cから始めます。パーサは三桁コードを展開し、桁を小文字化し、各対をゼロから二百五十五までの赤・緑・青の整数へ変換します。その八ビット尺度での中間灰は百二十八です。
これはペイントソフトやラスタパイプラインの古典的なコントラストスライダが使う整数の支点です。各チャネルは普通の算術で書き直されます。中間灰を引き、コントラスト係数を掛け、再び中間灰を足し、最も近い整数へ丸め、ゼロから二百五十五の合法な箱へクランプします。
すでに中間灰にあるチャネルは符号付き距離がゼロなので、任意の有限係数で動きません。中間灰より暗いチャネルは、係数が一より大きいとそこから遠ざかり、ゼロと一の間だと近づきます。中間灰より明るいチャネルは逆向きに同じことをします。
ちょうど一の係数は恒等変換で、丸めた各チャネルは入力と一致します。ゼロの係数は三チャネルすべてを中間灰に平坦化し、それはhexコードの八・零・八・零・八・零です。大きな係数はクリップします。
暗い赤はゼロに、明るい青は二百五十五に当たり、クリップされた端点は巻き戻さず合法な壁に留まります。同じ係数が赤・緑・青に独立して掛かるため、色相を固定するHSLコントラストの話と比べ、相対的なチャネルバランスは変わり得ます。その差は意図的です。 この契約は中間灰まわりの線形な引き伸ばしであり、知覚スライダでも二色のWCAG比でもありません。
四桁・八桁のアルファ付きhexは、契約が不透明RGBのみであるため拒否されます。
入力契約、応答の形、検証
colorはhex文字列、factorはゼロから十までを含む有限数です。各見本にはrole、hex、整数のr g b、表示用のrgb文字列が含まれます。トップレベルのhex、r、g、bは一行クライアント向けにコントラスト調整後の結果を反映します。
短いformula文字列はチャネルごとの中間灰規則を文書化とサポート用に示します。典型的な確認は、中間の青に係数一点五を適用する、飽和した赤を灰色へ平坦化するために係数零点五を適用する、係数一が元のhexを返すことを確認する、係数ゼロが中間灰になることを確認する、係数十五や色の欠落を拒否する、などです。
素早いプレビューには無料のブラウザフォームを配線し、トークンの一括生成や継続的インテグレーションの検査が必要なときはスクリプトから同一契約を呼び出してください。乗数そのものの黙ったクランプに頼らず、文書化された区間内に係数を保ってください。このツールは不正な係数ではっきり失敗し、設計システムとレンダリングパイプラインが環境間で予測可能であるようにします。
中間灰のコントラスト係数が役立つ場面
ブランドと製品のチームはしばしば一つの主役hexを保ち、フル画像エディタを開かず、目分量で第二のブランド色を作らずに、より強くまたはより静かな同伴色を必要とします。デザイントークンの著者は、HSLの明暗がパステルすぎ、ガンマが表示固有すぎるときに、ベース見本へ係数を掃引してコントラストの段を作ります。
プレゼンテーションとマーケティングの道具は、飽和したロゴからキャンペーン変種を作ります。ポスターでは係数を上げ、落ち着いた背景チップでは下げます。撮像を教える著者は、RGBを中間灰まわりに引き伸ばすことがHSL明度の変更ともガンマべき曲線とも二色のWCAGコントラスト測定とも違うことを示せます。
後でアクセシビリティのために二つのhexを比べる、ガンマ指数を適用する、HSLで明るくまたは暗くする、写真全体をフィルタする必要があるなら、この中間灰係数のページを過負荷にせず、別の検索意図とランディングとして扱ってください。
活用例
色相を変えずにブランドhexを強くする
一つのロゴ色を中間灰まわりで引き上げ、ポスター、ホバー状態、デザインレビュー用に結果のhexを残します。
一つの見本から落ち着いたトークン段
係数を一未満で掃引し、HSL明度を動かさず同じRGB比率のまま中間調を灰色へ平坦化します。
よくある質問
コントラスト係数はhex色をどのように変えますか?
各RGBチャネルcはclamp(round(128 + (c − 128) × factor), 0, 255)になります。中間灰は固定です。 係数が1より大きいと暗い・明るいチャネルは128から遠ざかり、1より小さいと128へ近づきます。
どのhex形式が受け付けられますか?
先頭ハッシュの有無を問わず、三桁および六桁のCSS hexです。アルファ形式(#rgba / #rrggbbaa)と非hex文字は拒否されます。
係数はどの範囲で指定できますか?
0から10までの有限の数値です。範囲外の値や数値でない入力は、別の値に置き換えずにエラーとして返します。
係数0と1ではどうなりますか?
係数1なら色はまったく変わりません。係数0ではすべてのチャンネルが中間グレーになり、どんな色も#808080になります。1より大きいとコントラストが上がり、0~1の間では弱まります。
チャンネルが0や255で止まるのはなぜですか?
係数が大きいと値が範囲を超えることがあり、暗い赤は0、明るい青は255に達します。その場合は反対側に回り込まず、上限・下限の値で止まります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/color/contrast-adjust \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"color":"#3366cc","factor":1.5}'const res = await fetch("https://api.kit.forhosting.com/color/contrast-adjust", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"color": "#3366cc",
"factor": 1.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/contrast-adjust",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"color": "#3366cc",
"factor": 1.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/contrast-adjust", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"color":"#3366cc","factor":1.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"color":"#3366cc","factor":1.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/contrast-adjust", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"color": "#3366cc",
"factor": 1.5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.contrast_adjust",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
無効なhex文字列や許容外の係数は黙って包まず、明確なinvalid_inputで失敗します。無料のブラウザ経路と有料APIは同一の純粋な同型関数を共有するため、同じ入力対ではデザインレビューと自動化が食い違いません。
入力契約、応答の形、検証
二つのフィールドを送ってください。colorは別名hexとbaseも受け付け、factorはcontrastとamountも受け付けます。欠落フィールド、非hex文字、誤った長さ、NaN、Infinity、負の係数、十を超える値はinvalid_inputで失敗し、課金されません。成功時は正規化された六桁の色と数値係数をエコーし、mid_grayを百二十八と報告し、originalとresultの見本を返します。成功したAPI呼び出しの料金は項目あたり公開ベースの$0.002で、検証失敗は前払い残高を消費しません。
中間灰のコントラスト係数が役立つ場面
本能力は純粋なparseエンジンであるため、API料金は成功項目あたり公開ベースの$0.002で、失敗した検証は残高を消費しません。
連携の活用例
テーマコントラストのCIゴールデン検査
パレット編集後も本番トークンが期待どおりの中間灰引き伸ばしと一致することを、画像エディタを開かずに確認します。
技術的な質問
どの係数範囲が許されますか。
係数は[0, 10]の有限数でなければなりません。負の値、Infinity、NaN、10を超える数はクランプされずinvalid_inputで失敗します。
factor = 1とfactor = 0では何が起きますか。
係数1は恒等変換です。どのチャネルも変わらないので、結果hexは正規化した入力hexと一致します。係数0は全チャネルを中間灰128、すなわち#808080へ潰します。
色のコントラスト調整にはいくらかかりますか。
ブラウザツールは無料で、手元で動きます。API要求は成功項目あたり$0.002の前払いKIT残高を使い、無効な入力は課金されません。