RGB画像ピクセルを輝度加重でグレースケール変換
赤・緑・青の値を、人の目が感じる明るさに沿った灰色に変換します。純粋な赤は76、純粋な緑は150、純粋な青は29になり、128の中間の灰色は128のままです。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
画像ファイルのアップロードやデコーダーを使わず、RGB画素サンプルをグレースケールへ変換できます。赤・緑・青の各チャンネルを持つ画素を順序付き配列で送ると、同じ数の画素が返り、出力の3チャンネルには輝度加重した同一の灰色値が設定されます。単純平均ではなく、緑、赤、青の順に重みを付けるため、知覚される明るさをより適切に表現します。チャンネル不足、数値以外、0から255の範囲外は明確なエラーになります。
完全なRGBレコードをご用意ください
空ではない配列とし、各要素は標準名r、g、bを持つオブジェクトにしてください。チャンネル値は整数でも小数でも構いませんが、有限であり、0以上255以下でなければなりません。すべての画素に3チャンネルが必要です。
欠損値を0とみなしたり、別チャンネルを複製したり、画素を飛ばしたりはしません。そのような補完は明るさと位置対応を変えるためです。入力順は出力でも維持され、バッファー、行列、テストデータへ戻せます。
1回につき最大10万サンプルです。大きな画像は決定的なブロックへ分割してください。本機能は復号済みサンプルを扱い、PNG、JPEG、WebPのバイト列は扱いません。
輝度加重の計算をご確認ください
各サンプルの灰色値は、赤の0.299倍、緑の0.587倍、青の0.114倍を加え、最も近い整数へ丸めた値です。係数の合計は1で、中立色を保ち、緑に対する視覚感度の高さを反映します。単純平均では青が明るすぎ、緑が暗すぎる場合があります。
丸めは1回だけ行い、同じ値をr、g、bへ書き込むため、色かぶりのないRGBグレーになります。応答には件数と式も含まれ、監査しやすくなっています。処理は純粋関数であり、ネットワーク、乱数、時刻、外部モデル、可変状態を使いません。
同じ入力からは常に同じ出力が得られます。ガンマ線形化、ICCプロファイル、HDR、アルファ、ディザリングは対象外です。必要な場合は専用工程で処理してください。
結果を安全に組み込んでください
返されたsamplesは、送信した配列と位置が対応する置換データとしてお使いください。各レコードは3チャンネルのままなので、通常のRGB処理へ特別な形式なしで渡せます。行、タイル、ラスターを再構成する前に、countと送信件数を比較してください。
幅、高さ、行ストライド、向き、アルファ、メタデータは呼び出し側で保持します。透明度がある場合はアルファを別に保存し、符号化時に再結合してください。チャンネル不足、非有限数、範囲、件数のエラーは再試行対象ではなくデータ品質の問題として扱います。
黒、白、原色、中立グレー、小数、不完全なサンプルでテストすると安全です。
活用例
グレースケールバッファーの構築
復号済みRGB値を変換し、符号化前に元のラスター位置へ戻せます。
決定的なテストデータの作成
フィルター、canvas、画素処理の試験に使う正確な期待値を生成できます。
よくある質問
どのグレースケール式を使いますか?
round(0.299 × r + 0.587 × g + 0.114 × b)を計算し、その値を3チャンネルへ設定します。
画像ファイルを直接渡せますか?
いいえ。 復号済みRGBサンプルを受け取ります。復号と再符号化は外部で行ってください。
透明度は保持されますか?
アルファは仕様外です。 別に保持し、変換済みチャンネルと後で再結合してください。
純粋な青が純粋な緑よりずっと暗くなるのはなぜですか?
人の目は緑を青よりはるかに明るく感じるため、式では緑に0.587、青には0.114の重みしか与えないからです。純粋な緑は150、赤は76、青は29になります。
画素の色が1つ欠けている場合はどうなりますか?
変換は止まり、どの画素のどの色が欠けているかを示します。欠けた値をゼロとみなしたり別の色をコピーしたりはしません。明るさが変わり、画素の順番も崩れてしまうためです。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/grayscale-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}'const res = await fetch("https://api.kit.forhosting.com/image/grayscale-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/grayscale-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/grayscale-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/grayscale-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.grayscale_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_samples | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
完全なRGBレコードをご用意ください
画素はJSONのsamplesフィールドに指定します。たとえば緑がない場合、invalid_inputが画素のインデックスと不足チャンネルを示します。
結果を安全に組み込んでください
ブラウザーとAPIは同じ決定的関数を使います。ブラウザーは無料で、API要求は$0.002です。
連携の活用例
少量サンプルの事前確認
API自動化の前に、代表的なRGB値をブラウザーで確認できます。
技術的な質問
チャンネルが不足するとどうなりますか?
invalid_inputとなり、0始まりのサンプル番号と不足しているr、g、bのいずれかを示します。
API要求の料金はいくらですか?
1回の要求は$0.002です。同じ変換をブラウザーでは無料で実行できます。