forked from PKGaspi/AsepriteScripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexport_layers.lua
134 lines (121 loc) · 4.05 KB
/
export_layers.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
--[[
Description:
A script to save all different layers in different files.
Made by Gaspi.
- Itch.io: https://gaspi.itch.io/
- Twitter: @_Gaspi
--]]
-- Import main.
local err = dofile("main.lua")
if err ~= 0 then return err end
-- Variable to keep track of the number of layers exported.
local n_layers = 0
-- Exports every layer individually.
local function exportLayers(sprite, root_layer, filename, group_sep, spritesheet)
for _, layer in ipairs(root_layer.layers) do
local filename = filename
if layer.isGroup then
-- Recursive for groups.
filename = filename:gsub("{layergroups}",
layer.name .. group_sep .. "{layergroups}")
exportLayers(sprite, layer, filename, group_sep, spritesheet)
else
-- Individual layer. Export it.
layer.isVisible = true
filename = filename:gsub("{layergroups}", "")
filename = filename:gsub("{layername}", layer.name)
os.execute("mkdir \"" .. Dirname(filename) .. "\"")
if spritesheet then
app.command.ExportSpriteSheet{
ui=false,
askOverwrite=false,
type=SpriteSheetType.HORIZONTAL,
columns=0,
rows=0,
width=0,
height=0,
bestFit=false,
textureFilename=filename,
dataFilename="",
dataFormat=SpriteSheetDataFormat.JSON_HASH,
borderPadding=0,
shapePadding=0,
innerPadding=0,
trim=false,
extrude=false,
openGenerated=false,
layer="",
tag="",
splitLayers=false,
listLayers=layer,
listTags=true,
listSlices=true,
}
else
sprite:saveCopyAs(filename)
end
layer.isVisible = false
n_layers = n_layers + 1
end
end
end
-- Open main dialog.
local dlg = Dialog("Export slices")
dlg:file{
id = "directory",
label = "Output directory:",
filename = Sprite.filename,
open = false
}
dlg:entry{
id = "filename",
label = "File name format:",
text = "{layergroups}{layername}"
}
dlg:combobox{
id = 'format',
label = 'Export Format:',
option = 'png',
options = {'png', 'gif', 'jpg'}
}
dlg:combobox{
id = 'group_sep',
label = 'Group separator:',
option = Sep,
options = {Sep, '-', '_'}
}
dlg:slider{id = 'scale', label = 'Export Scale:', min = 1, max = 10, value = 1}
dlg:check{
id = "spritesheet",
label = "Export as spritesheet:",
selected = false
}
dlg:check{id = "save", label = "Save sprite:", selected = false}
dlg:button{id = "ok", text = "Export"}
dlg:button{id = "cancel", text = "Cancel"}
dlg:show()
if not dlg.data.ok then return 0 end
-- Get path and filename
local output_path = Dirname(dlg.data.directory)
local filename = dlg.data.filename .. "." .. dlg.data.format
if output_path == nil then
local dlg = MsgDialog("Error", "No output directory was specified.")
dlg:show()
return 1
end
local group_sep = dlg.data.group_sep
filename = filename:gsub("{spritename}",
RemoveExtension(Basename(Sprite.filename)))
filename = filename:gsub("{groupseparator}", group_sep)
-- Finally, perform everything.
Sprite:resize(Sprite.width * dlg.data.scale, Sprite.height * dlg.data.scale)
local layers_visibility_data = HideLayers(Sprite)
exportLayers(Sprite, Sprite, output_path .. filename, group_sep, dlg.data.spritesheet)
RestoreLayersVisibility(Sprite, layers_visibility_data)
Sprite:resize(Sprite.width / dlg.data.scale, Sprite.height / dlg.data.scale)
-- Save the original file if specified
if dlg.data.save then Sprite:saveAs(dlg.data.directory) end
-- Success dialog.
local dlg = MsgDialog("Success!", "Exported " .. n_layers .. " layers.")
dlg:show()
return 0