-
Notifications
You must be signed in to change notification settings - Fork 0
/
gallery.js
115 lines (96 loc) · 2.31 KB
/
gallery.js
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
import imagemin from 'imagemin';
import imageminWebp from 'imagemin-webp';
import fs from "fs";
import path from "path";
const args = process.argv;
const argsSizes = args.splice(2);
const imageSizes = argsSizes.length > 0 ? argsSizes : [320, 768, 1024, 1920];
const fileFolder = 'images';
const tempFolder = 'tmp';
const destinationFolder = 'gallery';
const getSize = (size) => {
let sizeString = '';
switch(size) {
case imageSizes[0]:
sizeString = 'thumb';
break;
case imageSizes[1]:
sizeString = 'sm';
break;
case imageSizes[2]:
sizeString = 'md';
break;
case imageSizes[3]:
sizeString = 'lg';
break;
default:
break;
}
return sizeString;
};
const generateFiles = () => {
fs.readdir(fileFolder, (err, files) => {
if (err) throw err;
for (const file of files) {
imageSizes.forEach((el) => {
const fileName = file.split('.');
const extension = fileName.pop();
const newFileName = `${fileName.join('.')}-${getSize(el)}.${extension}`;
const fileFolderFile = `${fileFolder}/${file}`;
const tempFolderNewFileName = `${tempFolder}/${newFileName}`;
fs.copyFile(fileFolderFile, tempFolderNewFileName, (err) => {
if (err) throw err;
});
imagemin([tempFolderNewFileName], {
destination: destinationFolder,
plugins: [
imageminWebp({
quality: `${el > 1024 ? 75 : 65}`,
resize: {
width: el,
height: 0
},
}),
]
}).then(() => {
fs.unlink(path.join(tempFolderNewFileName), (err) => {
if (err) throw err;
});
});
});
}
});
};
const checkTemp = () => {
if (!fs.existsSync(tempFolder)) {
fs.mkdirSync(tempFolder);
generateFiles();
} else {
fs.readdir(`${tempFolder}/`, (err, files) => {
if (err) throw err;
for (const file of files) {
fs.unlink(path.join(`${tempFolder}/`, file), (err) => {
if (err) throw err;
});
}
generateFiles();
});
};
};
const cleanProcessedFolder = () => {
if (!fs.existsSync(destinationFolder)) {
fs.mkdirSync(destinationFolder);
checkTemp();
} else {
fs.readdir(`${destinationFolder}`, (err, files) => {
if (err) throw err;
for (const file of files) {
fs.unlink(path.join(`${destinationFolder}`, file), (err) => {
if (err) throw err;
});
}
checkTemp();
});
};
};
cleanProcessedFolder();