에이스프라이트- 태그 설정한 구간 스프라이트 시트로 뽑기
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.")
요걸 에이스프라이트에 스크립트 폴더에 넣고 리스캔스킯트 치면 알아서 적용된다
앵간하면 중복 태그는 하지 말고 단일 태그로 해두는게 속편하다.
갠적으로 편한 스크립트라 많이 애용할 생각.