-
Notifications
You must be signed in to change notification settings - Fork 17
/
convert.js
57 lines (54 loc) · 1.21 KB
/
convert.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
const fs = require("fs").promises;
const path = require("path");
const sharp = require("sharp");
module.exports = async ({
input,
output,
lossless,
quality,
effort,
chromaSubsampling,
keepMetadata,
overwrite,
appendExt,
verbose,
}) => {
let outputFilename = path.basename(input);
if (appendExt) {
outputFilename = outputFilename + ".avif";
} else {
outputFilename = outputFilename.replace(path.extname(input), ".avif");
}
const outputPath = path.join(
output ? output : path.dirname(input),
outputFilename,
);
try {
const exists = (await fs.stat(outputPath)).isFile();
if (exists && !overwrite) {
if (verbose) {
process.stdout.write(`${input}: ${outputPath} already exists\n`);
}
return true;
}
} catch (err) {}
try {
const pipeline = sharp(input).avif({
quality,
effort,
lossless,
chromaSubsampling,
});
if (keepMetadata) {
pipeline.keepMetadata();
}
await pipeline.toFile(outputPath);
if (verbose) {
process.stdout.write(`${input}: created ${outputPath}\n`);
}
return true;
} catch (err) {
process.stderr.write(`${input}: ${err.message}\n`);
return false;
}
};