smaller images

Former-commit-id: dde678d5fa343d18dcf0c82ef7a07936c676bfea
This commit is contained in:
Ben
2022-04-19 21:42:34 +01:00
parent ed5279c7c9
commit 234c34f780
17 changed files with 358 additions and 222 deletions

50
db/image-smallinator.js Normal file
View File

@@ -0,0 +1,50 @@
const fs = require('fs');
const sharp = require('sharp');
// itterate over every single png file in img recursively
const dir = './db/img';
const replaceDir = './db/image';
// https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search
const { promisify } = require('util');
const { resolve } = require('path');
const readdir = promisify(fs.readdir);
const stat = promisify(fs.stat);
async function getFiles(dir) {
const subdirs = await readdir(dir);
const files = await Promise.all(subdirs.map(async (subdir) => {
const res = resolve(dir, subdir);
return (await stat(res)).isDirectory() ? getFiles(res) : res;
}));
return files.reduce((a, f) => a.concat(f), []);
}
function itterate(files) {
for (let i = 0; i < files.length; i++) {
const file = files[i];
// if file is a png, compress using sharp
if (file.endsWith('.png')) {
console.log(`Compressing ${file}`);
const fileName = file.split('img').pop();
sharp(file)
.withMetadata()
.png({
quality: 50,
compression: 6,
})
.toFile(`${replaceDir}/${fileName}`, (err) => {
if (err) {
console.log(err);
return;
}
console.log(`Compressed ${file}`);
});
}
}
}
getFiles(dir)
.then(files => itterate(files))
.catch(e => console.error(e));