-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathspritezero
More file actions
executable file
·104 lines (84 loc) · 2.32 KB
/
spritezero
File metadata and controls
executable file
·104 lines (84 loc) · 2.32 KB
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
#!/usr/bin/env node
var spritezero = require('@mapbox/spritezero');
var fs = require('fs');
var d3 = require('d3-queue');
var multiline = require('multiline');
var path = require('path');
var stringify = require('json-stable-stringify');
var argv = require('minimist')(process.argv.slice(2), {
boolean: ['retina', 'unique', 'h', 'help']
});
function filepaths (dir) {
return fs.readdirSync(dir)
.filter(function (d) {
return !d.match(/^\./);
})
.map(function (d) {
return path.join(dir, d);
});
}
function showHelp () {
console.log(multiline(function () {
/*
spritezero
Generate sprite sheets for maps and the web using SVG files as input
Usage
<output> <inputdir>
Example
spritezero maki maki/
*/ }));
}
if (argv.help || argv._.length < 2) {
showHelp();
/* istanbul ignore next */
process.exit(1);
}
var ratio = 1;
var unique = false;
if (argv.retina) {
ratio = 2;
} else if (argv.ratio) {
ratio = parseFloat(argv.ratio);
}
if (argv.unique) {
unique = true;
}
var outfile = argv._[0];
var input = argv._[1];
function loadFile (file, callback) {
fs.readFile(file, function (err, res) {
return callback(err, {
svg: res,
id: path.basename(file).replace('.svg', '')
});
});
}
function sortById (a, b) {
return b.id < a.id;
}
var q = d3.queue(16);
filepaths(input).forEach(function (file) {
q.defer(loadFile, file);
});
q.awaitAll(function (err, buffers) {
if (err) throw err;
buffers.sort(sortById);
function saveLayout (err, formattedLayout) {
if (err) throw err;
fs.writeFile(outfile + '.json', stringify(formattedLayout, {space: ' '}), 'utf8', function (err) {
if (err) throw err;
});
}
function saveImage (err, layout) {
if (err) throw err;
spritezero.generateImage(layout, function (err, image) {
if (err) throw err;
fs.writeFile(outfile + '.png', image, function (err) {
if (err) throw err;
});
});
}
var genLayout = unique ? spritezero.generateLayoutUnique : spritezero.generateLayout;
genLayout({ imgs: buffers, pixelRatio: ratio, format: true }, saveLayout);
genLayout({ imgs: buffers, pixelRatio: ratio, format: false }, saveImage);
});