Aseprite タイルセットの分割保存スクリプト(空画像スキップ&差分機能付き)

先日ドット絵のアイコン素材集を公開したのですが、その際にAsepriteで制作したタイルセットを個別の画像に出力したい場面がありました。

Asepriteは拡張スクリプトに対応しており、指定したサイズで分割保存するスクリプトも検索すれば出てきます。私も以前はそのスクリプトをお借りしていたのですが、作業効率化のためにいくつか機能を加えて自作することにしました。仕様は以下の通りです。

  • 指定サイズでタイルセットを分割して出力する
  • 何も描かれていない透明な画像は出力をスキップする
  • ファイル名にはXY座標に基づいた連番を含め、スキップした画像の連番は空けておく
  • 差分レイヤーを1つ指名し、そのレイヤーの表示と非表示、両方の状態で出力を行う
  • 差分有効時はフォルダとファイル名に差分レイヤー名を含める

欲しかったのは太字の「空画像のスキップ」と「差分の出力」ですね。これがないと出力の度にファイルの数だけ手動で作業する羽目になるので…

以上の仕様で自作したものがこちらになります。ただし、私はAsepriteの拡張スクリプトはおろかLuaスクリプトも初めて触る素人ですので、色々と作法がなってないかもしれません。あくまで自己責任でお願いしますネ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
-- 分割サイズと差分レイヤー名の指定
local width = 16
local height = 16
local variation = "outline"

local function saveTiles(sprite, dir, name)  
  -- レイヤーを統合したRGBカラーモードのイメージを生成
  local image = Image(sprite.width, sprite.height, ColorMode.RGB)
  image:drawSprite(sprite)
    
  -- タイルごとに保存処理を実行(端数は実行しない)
  for y = 0, sprite.height / height - 1 do
    for x = 0, sprite.width / width - 1 do
      -- 保存用イメージを作成して描画を行う(座標指定はマイナスになる点に注意)
      local tile = Image(width, height)
      tile:drawImage(image, Point(-x * width, -y * height))      
      -- 描画されているイメージのみ保存する
      if (not tile:isPlain(Color{ r=0, g=0, b=0, a=0 })) then
        tile:saveAs(string.format("%s/%s/%s_%d_%d.png", dir, name, name, y, x))
      end
    end
  end
end

local function saveSprite(sprite)
  -- パス情報を取得
  local dir = app.fs.filePath(sprite.filename)
  local name = app.fs.fileTitle(sprite.filename)
    
  -- 差分レイヤーが存在する場合は差分ありの出力を行う
  for _, layer in ipairs(sprite.layers) do
    if layer.name == variation then
      layer.isVisible = true
      saveTiles(sprite, dir, name.."_"..variation)
      layer.isVisible = false
      break
    end
  end
  -- 差分なしの出力
  saveTiles(sprite, dir, name)
end

-- 現在開いているファイルを対象に保存を実行
saveSprite(app.activeSprite)

スクリプトを保存する場所はAsepriteの「ファイル」→「スクリプト」→「スクリプトフォルダを開く」で確認できます。そこに上記スクリプトを.lua形式で保存してください。

保存後は再起動か同メニューの「スクリプトフォルダを再スキャン」を選択。スクリプトのメニューに保存したファイルのタイトルが表示されるようになるので、そこから実行できます。

あとはご自身の環境に合わせて分割サイズと差分レイヤー名を指定してください。スクリプト冒頭に記述があります。

以上、Asepriteのタイルセット出力用スクリプトでした。

このスクリプトのために出品作業が1日止まりはしたものの、おかげで無駄な作業が減りましたし、以前お借りしていたものよりも処理速度がかなり改善されたので、そこは自作してよかったですね。

ループ毎に保存用イメージを生成していたりと気になる点はいくつかあるのですが、変に触って挙動が変わっちゃうのもイヤなので一旦これで公開としておきます。今後も機能が増えたらここに追記するかもしれません。

ドット絵アイコン素材集『16×16 Pixel Icon Collection』