YIQからRGBへの変換
このYIQからRGBへの変換ツールは、NTSC色モデルの輝度と2つの色差成分を、実用的な赤・緑・青の値へ変換します。固定の逆行列を適用し、正規化値と8ビット値の両方を返すほか、表示可能なRGB範囲に収めるために切り詰めたチャンネルを明示します。計算前に厳密な検証を行い、欠落値、数値でない値、無限値、許容範囲外の値を拒否します。ネットワークを使わないため、同じY、I、Qには常に同じ結果が得られます。
無料で実行
正規化YIQ成分を正しく入力します
数値の3成分を指定してください。Yは輝度、Iは同相色差、Qは直交色差です。Yは0から1、Iは-0.5957から0.5957、Qは-0.5226から0.5226の範囲でなければなりません。これらはNTSC YIQの正規化された範囲であり、バイト値でも割合でもありません。Yがゼロに近いほど輝度は低く、1に近いほど高くなります。符号付きのIとQは、その輝度を基準に色の情報を表します。API、SDK、ブラウザーのフォームで契約を曖昧にしないため、数字を表す文字列ではなく、実際のJSON数値を送信してください。この変換ツールは、未指定の値、文字列、NaNに相当する値、無限値、宣言範囲外の数値を拒否します。この厳格な処理により、入力ミスや尺度の取り違えから、もっともらしい誤色が生成されることを防ぎます。説明的な連携向けにluminance、in_phase、quadratureという別名も受け付けますが、標準フィールドはy、i、qです。
NTSC逆行列と範囲制限を理解します
計算には固定変換R = Y + 0.956I + 0.621Q、G = Y - 0.272I - 0.647Q、B = Y - 1.106I + 1.703Qを使用します。各式は最初に、範囲制限前の正規化チャンネルを生成します。正しい範囲のYIQ成分でもRGB立方体の外側の色を表す場合があります。許容されるYIQ領域は、赤・緑・青がゼロから1に収まる組み合わせと完全には一致しないためです。そのため各出力を個別に制限し、ゼロ未満はゼロ、1を超える値は1にします。制限前の値はunclamped_rgbに保持され、影響を受けたチャンネルはclippedに示されるため、変更が隠れることはありません。その後、制限済みの正規化成分を255倍し、最も近い整数へ丸めて一般的な8ビットチャンネルを作ります。同じ値から、小文字6桁の16進色とCSSのrgb()値も生成します。固定係数と安定した小数丸めにより、繰り返し実行しても予測可能な結果になります。
結果を読み取り安全に利用します
アプリケーションが個別の整数チャンネルを必要とする場合はred、green、blueを、3要素の配列を必要とする場合はrgbをお使いください。デザインツールやカラーピッカーにはhex、スタイルシートにはcssが適しています。ゼロから1のチャンネルを扱う描画コードではnormalized_rgbが便利です。unclamped_rgbは直接表示する色ではなく診断情報で、色域制限前の行列計算値を示します。色の忠実性が重要な場合はclippedを確認してください。切り詰めがある場合、指定したYIQ点は表示可能なRGBの外側にあり、返される色は各チャンネルを個別に制限した近似値です。完全に逆変換できる表現ではありません。この違いは、旧式の放送信号の解析、画像処理式の移植、異なる係数を使う実装の比較で重要です。別のシステムが異なるYIQ定義を使う可能性がある場合は、採用した行列も記録してください。1回のリクエストで1色を変換し、API料金は$0.002です。ネットワーク、乱数、時刻、隠れた状態、地域依存の書式は使いません。
活用例
過去のNTSC色情報を復号する
保存資料や教材のYIQデータに含まれる正規化輝度・色差サンプルを、表示可能なRGBチャンネルへ変換します。
描画実装を検証する
逆行列、色域制限、16進表記、整数丸めの出力を、決定的な参照結果と比較できます。
色域外の色を調べる
制限前の値とチャンネル別フラグから、正しいYIQ点がRGB立方体に正確に収まらない理由を確認します。
よくある質問
入力できる範囲はどこまでですか?
Yは0から1、Iは-0.5957から0.5957、Qは-0.5226から0.5226です。すべて有限のJSON数値で指定してください。
どの逆行列を使用しますか?
R = Y + 0.956I + 0.621Q、G = Y - 0.272I - 0.647Q、B = Y - 1.106I + 1.703Qを使用します。
正しいYIQ入力でも切り詰められるのはなぜですか?
有効なYIQ領域が正規化RGB立方体を越える場合があるためです。0から1の外に出た生のチャンネルは表示用に制限されます。
8ビットRGBチャンネルはどう作りますか?
各正規化チャンネルを0から1に制限し、255倍して最も近い整数へ丸めます。
この変換は元に戻せますか?
係数と丸め方式が一致し、切り詰めがない場合に限られます。整数への丸めでも精度が失われます。
APIリクエストの料金はいくらですか?
1回の料金は$0.002です。各リクエストで1つのYIQ色を処理します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/color/yiq-rgb \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"y":0.5,"i":0.2,"q":-0.1}'const res = await fetch("https://api.kit.forhosting.com/color/yiq-rgb", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"y": 0.5,
"i": 0.2,
"q": -0.1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/yiq-rgb",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"y": 0.5,
"i": 0.2,
"q": -0.1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/yiq-rgb", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"y":0.5,"i":0.2,"q":-0.1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"y":0.5,"i":0.2,"q":-0.1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/yiq-rgb", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"y": 0.5,
"i": 0.2,
"q": -0.1
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.yiq_rgb",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |