에이스프라이트- 태그 설정한 구간 스프라이트 시트로 뽑기

2024. 6. 30. 02:42카테고리 없음

-- ExportTagsToGIF.lua
-- ExportTagsToGIF.lua
local sprite = app.activeSprite
if not sprite then
  return app.alert("There is no active sprite")
end

local tags = sprite.tags
if #tags == 0 then
  return app.alert("There are no tags in the sprite")
end

-- 현재 스프라이트 파일의 디렉토리 경로를 추출
local spriteFilename = sprite.filename
local spriteDir = spriteFilename:match("(.*[/\\])")

-- 태그 목록을 중복 태그와 함께 구성
local function getTagName(tag)
  local tagNames = {}
  for _, t in ipairs(tags) do
    if tag.fromFrame.frameNumber >= t.fromFrame.frameNumber and tag.toFrame.frameNumber <= t.toFrame.frameNumber then
      table.insert(tagNames, t.name)
    end
  end
  return table.concat(tagNames, "_")
end

-- GIF 파일 내보내기 함수
local function exportGIF(tag)
  local tagName = getTagName(tag)
  local gifFilename = spriteDir .. tagName .. ".gif"
  
  local tempSprite = Sprite(256, 256, sprite.colorMode)
  for frame = tag.fromFrame.frameNumber, tag.toFrame.frameNumber do
    tempSprite:newFrame()
    local mergedImage = Image(256, 256, sprite.colorMode)
    for _, layer in ipairs(sprite.layers) do
      if layer.isVisible then
        local cel = layer:cel(frame)
        if cel then
          mergedImage:drawImage(cel.image, cel.position)
        end
      end
    end
    local tempCel = tempSprite:newCel(tempSprite.layers[1], frame - tag.fromFrame.frameNumber + 1)
    tempCel.image:drawImage(mergedImage, Point(0, 0))
  end

  tempSprite:saveCopyAs(gifFilename)
  tempSprite:close()
end

-- 스프라이트 시트 내보내기 함수
local function exportSpriteSheet(tag)
  local tagName = getTagName(tag)
  local framesCount = tag.toFrame.frameNumber - tag.fromFrame.frameNumber + 1
  local sheetFilename = spriteDir .. tagName .. ".png"

  -- 스프라이트 시트를 내보내기 위해 app.command.ExportSpriteSheet 사용
  app.command.ExportSpriteSheet{
    ui=false,
    type=SpriteSheetType.HORIZONTAL,
    columns=framesCount,  -- 각 프레임을 가로로 배치
    rows=1,
    width=256 * framesCount,  -- 전체 너비
    height=256,  -- 높이
    fromFrame=tag.fromFrame.frameNumber,
    toFrame=tag.toFrame.frameNumber,
    filename=sheetFilename,
    bestFit=false,
    textureFilename=sheetFilename,
    trimSprite=false,
    trimFrame=false,
    layer="merged",
    tag=tag.name,
    emptyCels=true  -- 빈 프레임 포함
  }
end

-- 각 태그에 대해 GIF 및 스프라이트 시트 내보내기
for _, tag in ipairs(tags) do
  exportGIF(tag)
  exportSpriteSheet(tag)
end

app.alert("Export completed. Check the folder containing your .ase file.")

ExportTagsToGIF.lua.lua
0.00MB

 

요걸 에이스프라이트에 스크립트 폴더에 넣고 리스캔스킯트 치면 알아서 적용된다

앵간하면 중복 태그는 하지 말고 단일 태그로 해두는게 속편하다. 

갠적으로 편한 스크립트라 많이 애용할 생각.