本文へスキップ

ピクセルパーフェクト チェッカー · 倍率・ぼけ・グリッドずれの検出

このスプライトは本当に3倍ニアレスト?それとも2.5倍バイリニア? チェッカーは色が変わる列と行を見つけ、そこからブロックサイズを証明します。サンプリングも推測もしません。

ピクセルパーフェクト チェッカーは、ドット絵の画像がどんな状態かを教えます。すでに1倍か、正確な整数倍の拡大(倍率とグリッドのオフセット付き)か、小数倍やなめらかなサイズ変更か、ぼけているかです。Nerulioのチェッカーは色が変わる行と列を探します。その位置がすべて(共通のオフセットを1つ除いて)3の倍数にあれば、画像はちょうど3倍で、1倍の元画像をピクセル単位で復元できます。それ以外は、必要に応じて「確信なし」を付けた測定値として報告し、正確であるかのように直すことはしません。

スプライトのフレーム(PNG)をドロップ。複数フレームでひとつのパレットを共有します
ピクセルラボを開く
ブラウザ内で処理し、ファイルはアップロードされません。
ピクセルラボ:抽出した1つのパレットに固定したCC0スプライトのフレームと色ごとのピクセルの割合
CC0アセット(OpenGameArt)を開いた実際のピクセルラボ画面です。
出力
  • PNG frames測定確認· Pillow
  • Palette測定確認· re-import
  • pixel-lab.json未検証

サンプリングも推測もせずに判定する方法

整数倍の検出は算数です。きれいなk倍拡大では色はブロックの境目でしか変わらないので、色が変わる列の番号をkで割った余りはすべて同じになり、行も同じです。チェッカーはその位置を1回の走査で記録し、kを16から2まで試します。両方の軸に合う最大のkが倍率で、0から始まるグリッドを優先し、0でない共通の余りはずれて切られた画像のオフセットです。

整数のグリッドがなければ、同じ色が続く区間の長さから推定します。2.5倍のニアレスト拡大では3ピクセルと2ピクセルの区間が交互に並ぶので、最も短い区間(最小値の1.5倍以内)の平均が2.500倍になります。すべての区間を平均すると大きく出ます。単色の縁は多くのブロックが続いた長い区間1つだからで、同じテスト用スプライトでは2.885倍になりました。

ぼけは中間色として表れます。向かい合う2つの隣の色の、Oklabでちょうど間にある色を持つ縁のピクセルです。ニアレストで拡大した絵にはなく、テスト用スプライトのバイリニア2.5倍版には1243個(縁の86.3 %)と半透明のピクセル700個がありました。ブロックの中にノイズのピクセルが1つあるだけで正確な証明は崩れるので、JPEG画像が正確な整数倍の拡大と報告されることはありません。

倍率
1ドットあたりの画面ピクセル数。証明されたブロックのグリッドなら正確な値、そうでなければ推定値。
オフセット
グリッドの左と上から切られたピクセル数。2px・3px切られた4倍のスプライトはオフセット2, 3。
中間色のピクセル
隣同士の間の色を持つ縁のピクセル。なめらかに補間された跡。
確信なし
単色の画像や一方向にしか変化しない画像には、測るグリッドがない。

例:16 × 16のスプライトの4つの版

16 × 16のテスト用スプライトを別々に処理したあとのレポート:

入力                               レポート
64 × 64   4倍ニアレスト            倍率4(正確)、オフセット0, 0、論理サイズ16 × 16
62 × 61   同じもの、2・3px切り抜き  倍率4(正確)、オフセット2, 3、グリッドずれ
40 × 40   2.5倍ニアレスト          整数グリッドなし、推定2.500倍(区間3, 2, 3, 2 …)
40 × 40   2.5倍バイリニア          整数ではない、中間色の縁ピクセル1243個(86.3 %)

切り抜いた画像の1倍復元:ceil((62 + 2) / 4) × ceil((61 + 3) / 4) = 16 × 16

2.5倍の版には正確な1倍が含まれていません。ブロックの幅が2と3で交互になるので、チェッカーは復元を出さず、整理の機能を案内します。

できること

  • 色が変わる位置から正確な整数倍率とオフセットを検出(グリッドのずれた切り抜きも検出)。
  • 最も短い連続区間だけから非整数倍率を推定(2.5倍ニアレスト拡大は2.500倍と判定)。
  • ぼけ検出:2つの隣接色の中間色を持つ縁のピクセルと半透明ピクセルを数えます。
  • 正確なグリッドが証明されたときだけ1倍の元画像を復元、1×〜8×の整数拡大、色数予算・シルエットのチェック。

使い方

  1. 画像をドロップ。
  2. レポートで倍率・オフセット・ぼけた縁を確認。
  3. 正確なグリッドがあれば1倍を復元、なければ整数倍で拡大。
  4. 書き出し。

結果の確認

  • 正確な結果なら、論理サイズは各軸でceil((幅 + オフセット) ÷ 倍率)です。
  • 復元したスプライトを同じ倍率で拡大すると、切り抜いていない入力とピクセル単位で一致します。
  • 単色や縞模様の画像で「確信なし」と出るのは正しい結果です。測るものがありません。

トラブルシューティング

症状考えられる原因確認方法対処
明らかに拡大された画像なのに1倍と出るなめらかな補間やJPEGが平らなブロックを消し、整数のグリッドがないぼけの数値で中間色の縁ピクセルが多いなめらかな拡大や小数倍を測る整理パネル(1倍復元)を使う
4倍のはずの絵が2倍と出る色の変化の一部が4ピクセルの境目の間にある:拡大後に修正した、または2ピクセルのディテールがある4ピクセルのグリッドを崩す縁を拡大して見る2倍として受け入れるか、あとからの修正を先に消す
2.500倍のような推定だけで復元ボタンがない小数倍でブロックの幅が2種類あり、正確な1倍が存在しないレポートに「整数グリッドなし」測った縁で区切る整理パネルで1倍を作り直す
「確信なし」単色、または一方向にしか変化しない画像を見ると単色の塗りか縞模様直すものはありません。ディテールのあるフレームを調べる

ほかの方法

方法こんなときに向いています
ピクセル作業画面の整理パネル小数倍のサイズ変更、なめらかな補間、JPEG圧縮、生成画像のとき。そうしたグリッドを測り、1倍を新しいスプライトとして作り直します。
どのドット絵エディタでもグリッド表示きれいな画像が1枚のとき。見えるブロックの大きさにグリッドを合わせ、すべての縁がその上にあるか確かめます。

出力ファイルと検証方法

「測定確認」は、ダウンロードしたファイルをページ外(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倍の非整数倍率を正確に検出。

制限

  • 整数倍率は16倍まで(かつ画像の短辺以下)検出します。
  • 正確な証明には正確な色が必要です。ブロックの中にノイズのピクセルが1つでもあると、整数倍の拡大ではないと報告します。
  • 4096 × 4096より大きいフレームは受け付けません。すべての処理がメインスレッドで動き、まだキャンセルボタンがありません。
  • スプライトシートは1枚の画像として扱います。先にフレームに分割してください(スプライトシート分割)。
  • ディザーを有効にすると、クリーンアップの件数にディザーのピクセルが含まれます。先にディザーを「なし」にしてください。
  • 書き出すJSONは汎用形式で、Godot・Unityへの読み込みは試していません。

バージョンと出典

ピクセルラボのテスト(Chromium)で確認:1×・2×・3×・4×・8×のニアレストを正確に検出、2px・3px切り抜いた4倍のスプライトはオフセット2, 3、2.5倍ニアレストは2.500倍、3倍のスプライトは16 × 16でピクセル単位まで同じに復元。

よくある質問

「確信なし」と出るのはなぜ?

単色の画像や一方向にしか変化しない画像には測るグリッドがありません。推測せずにそう伝えます。

ぼけた(バイリニア)拡大を直せますか?

測定はします。テストのスプライトでは縁のピクセル1243個(86.3%)が中間色でした。ただし正確な復元は、きれいなブロックグリッドがあるときだけです。

無料ですか?アカウントは必要ですか?

このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。

スプライトはアップロードされますか?

いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。

Asepriteやエンジンのプラグインは必要ですか?

いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。