本文へスキップ

ドット絵パレット抽出 · .gpl・HEX・JSON

1枚の画像やアニメーション全体から、スプライトの本当のパレット(色ごとのピクセル数と割合)を取り出し、色数の予算内に収めます。

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

スプライトのフレーム(PNG)をドロップ。複数フレームでひとつのパレットを共有します
ピクセルラボを開く
ブラウザ内で処理し、ファイルはアップロードされません。
ピクセルラボ:抽出した1つのパレットに固定したCC0スプライトのフレームと色ごとのピクセルの割合
CC0アセット(OpenGameArt)を開いた実際のピクセルラボ画面です。
出力
  • 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色だけ、パレット外0

2つの緑をわざと塗り分けたならStudioで数え、リサイズや圧縮でできた色なら統合後の色を残してください。

できること

  • 全フレームから一度にパレットを作り、色ごとの正確なピクセル数と割合を表示。
  • 明度・色相・彩度・頻度で並べ替え(色相順ではグレーを末尾に)。
  • 色数予算のチェック:目標と実際、最も少ない色の一覧、最も近い残りの色へワンクリックで統合。
  • GIMP .gpl、Lospec形式のHEXリスト、JSONの読み書き。形式は拡張子ではなく内容で判定。

使い方

  1. 画像かフレームをドロップ。
  2. 色数と並び順を決める。
  3. 必要なら色数予算を設定し、少ない色を統合。
  4. パレット(.gpl・.hex・.json)か色を変えたフレームを書き出し。

ラボが書き出すパレットファイル

ファイル用途
palette.gplGIMPパレットのテキスト:Name:、Columns:、その後にR G Bと色名としてのhexコード。GIMPとAsepriteで開けます。
palette.hex1行に#rrggbbを1つ。Lospecも配布している素朴な一覧。
palette.jsonname、#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 framesanim_N.png · 1×–8× nearest測定確認 Pillow書き出したPNGを読み直し、すべての色が固定パレット内にあることを確認。
Palette.gpl · .hex (Lospec) · .json測定確認 re-import各形式を書き出してUIで読み戻し、16 → 16色を確認。
pixel-lab.jsongeneric 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のタイルセットは小さなエディタースクリプト)。