本文へスキップ

AIなしのドット絵拡大 · 整数倍ニアレスト1×〜8×

ストアページ・トレーラー・SNS用のドット絵は、ぼかさずに拡大する必要があります。整数倍のニアレスト拡大は各ピクセルを正確なN×Nのブロックにし、保存前に出力サイズを表示します。

ドット絵をぼかさずに拡大するには、ニアレストネイバーで整数倍にします。4倍なら32 × 32のスプライトは128 × 128になり、すべてのピクセルが正確な4 × 4のブロックになります。4.25倍のような小数倍は一部のピクセルを太くし、なめらかな拡大やAIアップスケーラーはぼけや作られたディテールを加えます。Nerulioのピクセルラボはフレームを1×〜8×のニアレストで拡大し、先に画像がすでに拡大済みかを調べるので、拡大されたコピーではなく1倍の元画像を拡大できます。

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

整数倍はグリッドを守り、それ以外はグリッドをゆがめる

ニアレストネイバーは元のピクセルをブロックに写すだけで、新しい値を計算しません。整数k倍ならすべてのブロックがk × kなので、1ピクセルの線は1ブロックの太さのまま、斜め線は規則的な階段のまま、色はパレットのままです。

4.25倍では32ピクセルの1行が136ピクセルになりますが、136を32個の等しいブロックに分けることはできません。ニアレストだと幅が5、4、4、4、5、4、4、4…となり、4つに1つのピクセルが25 %太くなって、きれいな斜め線が不揃いな階段になります。バイリニアやバイキュービックは隣を混ぜて不揃いを隠しますが、それこそ避けたかったぼけです。

目標サイズが絵の倍数でないとき — 400 × 225の絵から1920 × 1080のトレーラーを作ると4.8倍 — は最大の整数倍(4倍 → 1600 × 900)で拡大し、残りは余白や枠で埋めます。入力も先に確認しましょう。3倍のスクリーンショットをさらに4倍すると12倍になり、元からあった不揃いも一緒に大きくなります。チェッカーは画像が正確な整数倍の拡大なら1倍の元画像を復元します。

ニアレストネイバー
出力の各ピクセルが最も近い元のピクセルをコピー。混ぜない。
整数倍
2×、3×、4×…:すべてのドットが同じ正方形のブロックになる。
論理サイズ
絵の1倍のサイズ。128 × 128で表示するスプライトなら32 × 32。

例:サイズとブロックの幅

32 × 32のスプライトと400 × 225の場面:

32 × 32   ×2 →  64 × 64    全ピクセル2 × 2
32 × 32   ×4 → 128 × 128   全ピクセル4 × 4
32 × 32   ×8 → 256 × 256   全ピクセル8 × 8
32 × 32   ×4.25 → 136      幅5,4,4,4,5,4,4,4 …(不揃い)

1920 × 1080のトレーラー用に400 × 225:1920/400 = 4.8、1080/225 = 4.8
  最大の整数倍4 → 1600 × 900、左右160px・上下90pxの余白

5、4、4、4のパターンはニアレストのサンプリングから生まれます。出力のピクセルxは元のピクセル⌊x ÷ 4.25⌋を表示するので、元の0番はx = 0〜4(5ピクセル)、1番はx = 5〜8(4ピクセル)を占めます。

できること

  • ニアレストネイバーだけの1×〜8×整数倍。フィルターも生成されたディテールもなし。
  • チェッカーがすでに拡大済みか(正確な倍率とオフセット)を検出し、拡大した画像をさらに拡大するのを防ぎます。
  • 正確なグリッドがあれば、まず1倍を復元してから拡大してください。
  • アニメーションはフレームごとに処理し、PNGで書き出し。

使い方

  1. 画像かフレームをドロップ。
  2. 倍率レポートを読み、拡大済みなら1倍を復元。
  3. 整数倍率を選ぶ。
  4. PNGで書き出し。

結果の確認

  • 出力サイズが入力サイズ × 倍率とぴったり同じです(32 × 4 = 128)。
  • 結果をチェッカーに通すと、オフセット0, 0の正確な整数倍率と出るはずです。
  • 表示される場所(ストアページ、動画編集ソフト)で100 %で見ます。そこで縁がぼけていれば、プラットフォームがサイズを変え直しています。

トラブルシューティング

症状考えられる原因確認方法対処
拡大したPNGがWebページでぼやけるページが別のサイズで表示し、ブラウザがなめらかに補間しているCSSのサイズとファイルのサイズを比べる元のサイズで表示するか、CSSでimage-rendering: pixelatedを指定(MDNによれば、最も近い整数倍まではニアレスト、残りはなめらかに)
トレーラーやストアページでドットが不揃い編集ソフトやストアが倍数でないサイズ(4.8倍)に変えたファイルのサイズと出力解像度を比べる収まる最大の整数倍で拡大し、引き伸ばさずに余白を付ける
結果が予想よりずっと大きくカクカク入力がすでに拡大済みだった(3倍のあと4倍 = 12倍)チェッカーが入力に正確な整数倍率を報告する先に1倍に戻してから拡大
アップロード後に輪郭のまわりに色のノイズプラットフォームがJPEGで再エンコードしたアップロードされたコピーの縁を拡大PNGのまま扱う場所ならPNGでアップロード

ほかの方法

方法こんなときに向いています
パック&書き出しの拡大バリエーション(スプライトシートメーカー)1倍と一緒に@2x・@4xのエンジン用アトラスが必要なとき。このバリエーションはニアレストのみです。
Aseprite:File › Export › Export AsのResize欄すでにAsepriteで作業しているとき。Asepriteのドキュメントはアニメーションの投稿に400 %のような倍率を勧めています。
エンジンに1倍の絵を拡大させるゲーム内では1倍のテクスチャのまま、画面を整数倍で拡大します(Godot、Unity)。事前に拡大したテクスチャはメモリを使うだけです。

出力ファイルと検証方法

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

制限

  • 1×〜8×の整数倍だけで、小数倍やなめらかな方式はありません。
  • シートは1枚の絵として拡大されます。フレーム間の2pxの余白は4倍で8pxになります。
  • ディテールは足しません。ドット絵には正しい動作ですが、写真のアップスケーラーを求めているなら向きません。
  • 4096 × 4096より大きいフレームは受け付けません。すべての処理がメインスレッドで動き、まだキャンセルボタンがありません。
  • スプライトシートは1枚の画像として扱います。先にフレームに分割してください(スプライトシート分割)。
  • ディザーを有効にすると、クリーンアップの件数にディザーのピクセルが含まれます。先にディザーを「なし」にしてください。
  • 書き出すJSONは汎用形式で、Godot・Unityへの読み込みは試していません。

バージョンと出典

Chromiumでのピクセルラボのテストより:1×・2×・3×・4×・8×のニアレスト拡大をオフセット0, 0で正確に検出し、2.5倍ニアレストは2.500倍と読み、3倍のスプライトを16 × 16でピクセル単位まで同じに復元しました。CSSの動作はMDNの説明に、Asepriteの書き出しダイアログは公式ドキュメントに従っています。

参照した公式ドキュメント

よくある質問

なぜ整数倍だけ?

非整数倍は一部のピクセルを太くします。チェッカーはそれも測り、2.5倍ニアレスト拡大は2.500倍と判定して整数とは言いません。

AIアップスケーラーのようにディテールを足しますか?

いいえ。出力のすべてのピクセルは元のピクセルのコピーです。

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

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

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

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

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

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