-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
89 lines (82 loc) · 2.64 KB
/
index.js
File metadata and controls
89 lines (82 loc) · 2.64 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
const Jimp = require('jimp');
const readAll = require('./utils/read-all');
const FileExplorer = require('./utils/FileExplorer');
const FilePromise = require('./utils/FilePromise');
const Array = require('./utils/Array');
var IMAGE_REGEX = /([^\/]+)\.(jpe?g|png)$/i;
function defaults() {
for (var a of arguments) {
if (a === undefined) continue;
else return a;
}
}
module.exports = async function thumbify(directories = [], options = {}) {
if (typeof(directories) === 'undefined') {
throw 'Directories must be a string or array of strings containing the locations of files or folders.';
}
if (typeof(directories) === 'string') {
directories = [directories];
}
// if options is a string, it will be the output directory
if (typeof(options) === 'string') {
options = {output: options};
}
console.log('-------- Settings --------');
options.recursive = defaults(options.recursive, false);
options.output = defaults(options.output, './thumbs');
options.suffix = '_lowres';
options.width = defaults(options.width, 1280);
options.height = defaults(options.height, 1280);
options.quality = defaults(options.quality, 80);
options.mime = defaults(options.mime, Jimp.MIME_JPEG);
console.log('Dimensions: %d x %d', options.width, options.height);
console.log('Quality: ' + options.quality + '%');
console.log('Suffix: %s', options.suffix);
console.log('-------- Fetching --------');
var images = [];
for (var dirname of directories) {
if (IMAGE_REGEX.test(dirname)) {
console.log('Image: %s', dirname);
images.push(dirname);
continue;
}
var files = readAll({
dirname,
recursive: options.recursive,
filter: IMAGE_REGEX
});
for (var f in files) {
console.log('Image: %s', files[f]);
images.push(files[f]);
}
}
images = images.unique();
console.log('Total: %d', images.length);
console.log('-------- Processing --------');
for (var i = 0, imgDir; i < images.length; i++) {
imgDir = images[i];
var thumbName = FilePromise.getName(imgDir).replace(IMAGE_REGEX, function (dir, name, type) {
switch (options.mime) {
case Jimp.MIME_JPEG:
type = '.jpg';
break;
case Jimp.MIME_PNG:
type = '.png';
break;
}
return name + options.suffix + type;
});
var thumbDir = FilePromise.join(options.output, thumbName);
console.log('[%d/%d] %s', i+1, images.length, thumbDir);
try {
var image = await Jimp.read(imgDir);
image.scaleToFit(options.width, options.height);
image.quality(options.quality);
await image.write(thumbDir);
} catch (e) {
console.error(e);
}
}
console.log('Finished.');
FileExplorer.goto(options.output);
};