画像の色温度を調整
この画像色温度調整ツールは、画像の赤・緑・青の平均値とKelvin単位の変化量を、3つのチャンネル乗数へ変換します。平均色の相関色温度を推定し、指定された暖色または寒色方向の変化を適用して、正規化したRGBゲインを返します。画像をアップロードせず、線形光の処理工程で再現可能なホワイトバランス補正に利用できます。計算は常に同じ結果となり、APIは1回$0.002です。
無料で実行
代表性のある平均RGB値をご用意ください
補正対象を表す画素について、8ビットsRGBの各チャンネルの算術平均を求め、avg_r、avg_g、avg_bとして0から255の範囲で入力してください。画面全体の平均は、照明が広く均一な写真、商品画像の一括処理、サムネイル、自動プレビューに適しています。ただし、被写体の色が強い場合は、画面全体より無彩色領域の平均のほうが光源を正確に表すことがあります。赤い壁や青い海は、カメラのホワイトバランスが正しくても全体平均を大きく偏らせます。本ツールは画素を解析したり、中立色の物体を識別したり、照明と被写体色を分離したりしません。入力された要約値だけを使用します。完全な黒は色度がなく温度を推定できないため受け付けません。有限でない数値や8ビット範囲外の値もエラーになります。一括処理では抽出範囲やマスクを統一すると、画像間で比較可能な補正を得られます。
Kelvin変化量と計算モデルをご確認ください
shift_kelvinには絶対的な到達温度ではなく相対的な変化量を入力します。正の値は推定温度を上げて寒色寄りに補正し、負の値は温度を下げて暖色寄りに補正します。許容範囲は-10,000から10,000 Kelvinで、計算後の温度は1,000から40,000 Kelvin内でなければなりません。まず平均sRGBを線形化し、CIE XYZ色度へ変換して、McCamyの3次近似で相関色温度を推定します。次に推定温度と目標温度で決定論的な黒体RGB曲線を評価します。2つの白色点の比からチャンネルゲインを求め、緑が1になるよう正規化します。これは分光測定ではなく工学的近似です。相関色温度はプランク軌跡付近で最も意味を持つため、彩度の高い平均色では概算にとどまります。返される方式名と温度により、この前提を処理記録へ残せます。
画質を保って乗数を適用してください
red_multiplier、green_multiplier、blue_multiplierは、ガンマ符号化された8ビット値へ直接掛けず、線形光のRGB値へ適用してください。適切な工程ではsRGBを線形光へ復号し、各チャンネルへ対応ゲインを掛け、表示範囲を超える値を露出調整やトーンマッピングで処理してからsRGBへ再符号化します。符号化済みの値を直接乗算すると、小さな補正では自然に見えても光量との正しい関係が保たれません。緑は1に正規化されるため、結果は露出全体ではなく色バランスを表します。赤や青が1を超えると明部がクリップする場合がありますので、最終書き出しまで浮動小数点または十分なビット深度で処理してください。特に色彩の強い場面から平均値を得た場合は、大量処理の前に代表画像で確認することをおすすめします。APIは1回$0.002で、ブラウザー版は同じ計算を端末内で無料実行します。
活用例
商品写真の一括補正
同じ平均色の抽出方法を使い、カタログ出力前に再現可能なチャンネルゲインを算出します。
ホワイトバランス操作の試作
Kelvinスライダーの移動量を、Webまたはデスクトップ編集用の明確なRGB乗数へ変換します。
再現可能な補正の記録
推定温度、目標温度、ゲインを素材とともに自動メディア処理へ保存します。
よくある質問
正のKelvin変化量はどのように働きますか?
推定目標色温度を上げ、相対的に青を増やして赤を減らす寒色方向の補正になります。
対応する変化量の範囲はいくつですか?
変化量は-10,000から10,000 Kelvinで、目標温度は1,000から40,000 Kelvin内です。
緑の乗数が常に1なのはなぜですか?
露出調整とは別に色バランスを表せるよう、すべてのゲインを緑基準で正規化しているためです。
8ビットRGB値へ直接掛けてもよいですか?
いいえ。sRGBを線形光へ復号してゲインを適用し、明部を処理してからsRGBへ再符号化してください。
推定温度はどの程度正確ですか?
平均色度による近似です。無彩色の照明を表す標本では有効ですが、高彩度の被写体では精度が下がります。
APIの料金はいくらですか?
APIは1回$0.002です。Web版では同じ決定論的計算を端末上で無料実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/color-temperature-adjust \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"avg_r":142,"avg_g":128,"avg_b":110,"shift_kelvin":1200}'const res = await fetch("https://api.kit.forhosting.com/image/color-temperature-adjust", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"avg_r": 142,
"avg_g": 128,
"avg_b": 110,
"shift_kelvin": 1200
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/color-temperature-adjust",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"avg_r": 142,
"avg_g": 128,
"avg_b": 110,
"shift_kelvin": 1200
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/color-temperature-adjust", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"avg_r":142,"avg_g":128,"avg_b":110,"shift_kelvin":1200}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"avg_r":142,"avg_g":128,"avg_b":110,"shift_kelvin":1200}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/color-temperature-adjust", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"avg_r": 142,
"avg_g": 128,
"avg_b": 110,
"shift_kelvin": 1200
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.color_temperature_adjust",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
min_shift_kelvin | -10000 |
max_shift_kelvin | 10000 |
min_temperature_kelvin | 1000 |
max_temperature_kelvin | 40000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |