ドット絵パレット抽出 · .gpl・HEX・JSON
1枚の画像やアニメーション全体から、スプライトの本当のパレット(色ごとのピクセル数と割合)を取り出し、色数の予算内に収めます。
パレットの抽出は、スプライトが使っている色と、それぞれが何ピクセルを占めるかを示すので、うっかりできたほぼ同じ色を見つけ、色数の予算を守れます。画像1枚かアニメの全フレームをドロップすると、パレットの工程が全体で使うパレットを1つ作り(既定16色、2〜256)、色ごとの正確なピクセル数と割合を表示し、並べ替え、目標に合わせて最も少ない色を最も近い残りの色へ統合できます。GIMPの.gpl、HEXリスト、JSONで保存でき、何もアップロードしません。

- PNG frames測定確認· Pillow
- Palette測定確認· re-import
- pixel-lab.json未検証
正確な色の一覧と、抽出したパレットは別物
ラボの抽出は色を減らす処理です。まずピクセルをチャンネルあたり5ビット(256段階ではなく32段階)の箱にアルファで重み付けして集め、その箱をOklabでメディアンカットします。すべてのチャンネルで差が8段階未満の2色は同じ箱に入り、平均した1色として出てきます。ノイズのある画像やサイズを変えた画像には望ましい動きですが、手で打ったドット絵の色をそのまま知りたいときには向きません。
そのままの一覧が必要なら、Studioのピクセル作業画面で「絵からパレットを作る」を使います。正確な色をすべて(透明の枠のほかに最大255色)集め、使用量の多い順に並べます。一方ラボの数値は、ラボのパレットに対しては正確です。すべてのピクセルをOklabで最も近いパレット色へ割り当て(完全一致はそのまま)、フレームの合計が4メガピクセル未満なら全フレームを数えます。
色数の予算は、数値を判断に変えてくれます。目標を決めると、目標を超える最も少ない色が並び、統合は各色をOklabで最も近い残る色へ移します。一緒に消える色どうしは統合しないので、結果は本当に目標の色数だけを使います。
- 色数の予算
- スプライトやフレーム1枚が使ってよい最大の色数。
- 5ビットの箱
- 赤・緑・青の上位5ビット(各32段階)が一致する色のまとまり。
- 割合
- ある色のピクセル数を不透明ピクセル全体で割った値。
- .gpl
- GIMPのテキストパレット。「GIMP Palette」のヘッダー、任意のNameとColumns、その後に色ごとの「R G B 名前」の行。
例:2つの緑が1つになる理由と、16色から8色への予算
箱の計算と、ラボの検証で使った予算のテストです。
#3e8948 = (62,137,72) → 箱 62>>3=7、137>>3=17、72>>3=9
#3f8a4a = (63,138,74) → 箱 63>>3=7、138>>3=17、74>>3=9 同じ箱
抽出結果:2色をピクセル数で重み付け平均した1色
正確な一覧(Studio、絵からパレットを作る):2色とも、使用量順
予算:16色、目標8 → 最も少ない8色が並ぶ
統合:それぞれOklabで最も近い残る色へ
書き出し:フレームは実際に8色だけ、パレット外02つの緑をわざと塗り分けたならStudioで数え、リサイズや圧縮でできた色なら統合後の色を残してください。
できること
- 全フレームから一度にパレットを作り、色ごとの正確なピクセル数と割合を表示。
- 明度・色相・彩度・頻度で並べ替え(色相順ではグレーを末尾に)。
- 色数予算のチェック:目標と実際、最も少ない色の一覧、最も近い残りの色へワンクリックで統合。
- GIMP .gpl、Lospec形式のHEXリスト、JSONの読み書き。形式は拡張子ではなく内容で判定。
使い方
- 画像かフレームをドロップ。
- 色数と並び順を決める。
- 必要なら色数予算を設定し、少ない色を統合。
- パレット(.gpl・.hex・.json)か色を変えたフレームを書き出し。
ラボが書き出すパレットファイル
| ファイル | 用途 |
|---|---|
palette.gpl | GIMPパレットのテキスト:Name:、Columns:、その後にR G Bと色名としてのhexコード。GIMPとAsepriteで開けます。 |
palette.hex | 1行に#rrggbbを1つ。Lospecも配布している素朴な一覧。 |
palette.json | name、#rrggbb形式のcolors、[r,g,b]形式のrgb、count、source。 |
抽出したパレットを確認する
- 色数をStudioの正確な一覧と比べます。差が大きければ、画像にノイズがあるかリサイズされています。
- 頻度順に並べます。割合が0 %近い色は、予算の統合か孤立ピクセルの整理の候補です。
- 書き出したファイルを読み込み直します(貼り付けかファイル)。同じ色数が戻るはずです。
- 統合後にフレームを書き出し、別のツールで色を数えます。目標と一致するはずです。
トラブルシューティング
| 症状 | 考えられる原因 | 確認方法 | 対処 |
|---|---|---|---|
| 分けておきたい2色がまとめられた | 同じ5ビットの箱に入る(チャンネルごとの差が8段階未満) | Studioのピクセル作業画面の「絵からパレットを作る」と比べる | Studioの正確な一覧を使うか、2色の差を広げる |
| 32色を指定したのに少なく出た | 画像の異なる箱が指定より少ない。1色より細かくは分けられない | パレットの見本が指定数より少ない | 問題なし。画像がその色数しか使っていない |
| パレットファイルを読み込めない | ラボが読むのはGIMPの.gpl、HEXリスト、JSONだけ。JASCの.pal、AARRGGBBのPaint.net .txt、Asepriteの「Channels: RGBA」行がある.gplは拒否される | エラーが読めなかった行を示す | .gplか.hex版をダウンロードするか、より多くの形式を読むStudioのピクセル作業画面で読み込む |
| 数値が表示中のフレームだけ | 全フレームの合計が4メガピクセルを超えている | 数値の横のパネルにその旨が出る | 正確な合計が必要ならフレームを減らして読み込む |
ほかの方法
| 方法 | こんなときに向いています |
|---|---|
| Studioのピクセル作業画面:絵からパレットを作る | 手描きの絵の色をそのまま知りたいとき、または.gpl・.hex・.json以外の形式(.pal、.ase、.act)が必要なとき。パレットエディタを参照。 |
| 公開パレットから始める | スプライト固有の色ではなく、知られたパレットに従わせたいならLospecパレット。 |
| 抽出の前に倍率とぼけを確認 | 拡大画像かもしれないなら、ぼやけた拡大画像の色数は等倍に戻すまで意味がありません。ピクセルパーフェクトチェッカーを参照。 |
出力ファイルと検証方法
「測定確認」は、ダウンロードしたファイルをページ外(Pillow・numpy・独立したパーサー)で開き直して性質を測ったという意味です。ゲームエンジンでの読み込みは試していません。
| 書き出し先 | ファイル | 検証 |
|---|---|---|
| PNG frames | anim_N.png · 1×–8× nearest | 測定確認 Pillow書き出したPNGを読み直し、すべての色が固定パレット内にあることを確認。 |
| Palette | .gpl · .hex (Lospec) · .json | 測定確認 re-import各形式を書き出してUIで読み戻し、16 → 16色を確認。 |
| pixel-lab.json | generic frames + palette | 未検証汎用JSONで、どのエンジンでも読み込んでいません。 |
検証の根拠
アンチエイリアスのかかった8フレーム → 16色パレット1つ、パレット外の色0。ディザーなしとBayer 4×4の両方で変化のない領域が全8フレームで同一。アンチエイリアス除去で271色 → 16色、シルエットの移動0ピクセル。整数倍率・オフセット・2.5倍の非整数倍率を正確に検出。
制限
- 抽出はチャンネルあたり8段階より近い色をまとめるので、正確な一覧ではありません。
- 読み書きできるのは.gpl、HEX、JSONだけです。
- 正確な数値は全フレーム面積4メガピクセルまでです。
- 4096 × 4096より大きいフレームは受け付けません。すべての処理がメインスレッドで動き、まだキャンセルボタンがありません。
- スプライトシートは1枚の画像として扱います。先にフレームに分割してください(スプライトシート分割)。
- ディザーを有効にすると、クリーンアップの件数にディザーのピクセルが含まれます。先にディザーを「なし」にしてください。
- 書き出すJSONは汎用形式で、Godot・Unityへの読み込みは試していません。
バージョンと出典
Nerulio:docs/PIXEL-LAB.md(Chromium。16色から8色への統合結果を書き出したPNGで数え直し、.gpl・.hex・JSONの往復は16色 → 16色)。箱の計算はsrc/pixel-engine.jsに従います。ファイルの構造はGIMPの仕様と、Lospecが実際に配布するファイルに基づきます。
参照した公式ドキュメント
よくある質問
ピクセル数は正確ですか?
はい。アニメーション全体で4メガピクセルまでは正確で、それを超えると表示中のフレームだけを数え、パネルにその旨を表示します。
GIMPパレット入りの.txtも読めますか?
はい。形式を内容で判定するので、GIMPのヘッダーがある.txtは.gplとして読みます。
無料ですか?アカウントは必要ですか?
このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。
スプライトはアップロードされますか?
いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。
Asepriteやエンジンのプラグインは必要ですか?
いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。