Improve catalog cards and cart exports
This commit is contained in:
27
scripts/optimize_catalog_images.mjs
Normal file
27
scripts/optimize_catalog_images.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import { mkdir, readdir } from "node:fs/promises";
|
||||
import { join, parse } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import sharp from "sharp";
|
||||
|
||||
const root = fileURLToPath(new URL("../public/catalog-products/", import.meta.url));
|
||||
|
||||
async function optimizeDirectory(sourceDirectory, targetDirectory, width) {
|
||||
const sourcePath = join(root, sourceDirectory);
|
||||
const targetPath = join(root, targetDirectory);
|
||||
await mkdir(targetPath, { recursive: true });
|
||||
const entries = await readdir(sourcePath, { withFileTypes: true });
|
||||
const imageEntries = entries.filter((entry) => entry.isFile() && /\.(?:jpe?g|png)$/i.test(entry.name));
|
||||
|
||||
await Promise.all(imageEntries.map(async (entry) => {
|
||||
const filename = `${parse(entry.name).name}.webp`;
|
||||
await sharp(join(sourcePath, entry.name))
|
||||
.resize({ width, withoutEnlargement: true })
|
||||
.webp({ quality: 78, effort: 4 })
|
||||
.toFile(join(targetPath, filename));
|
||||
}));
|
||||
|
||||
console.log(`${sourceDirectory} -> ${targetDirectory}: ${imageEntries.length} images`);
|
||||
}
|
||||
|
||||
await optimizeDirectory("precision-gears/", "precision-gears-thumb/", 480);
|
||||
await optimizeDirectory("source-main/", "source-main-thumb/", 640);
|
||||
Reference in New Issue
Block a user