SEO Tweaks
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import sharp from 'sharp';
|
||||
import { writeFile, unlink, stat } from 'node:fs/promises';
|
||||
import { join } from 'node:path';
|
||||
|
||||
// Opaque-photo PNGs to convert to JPG (verified via metadata: no alpha)
|
||||
const targets = [
|
||||
'archie-auckland-dog-walking-review',
|
||||
'monty-auckland-dog-walking-review',
|
||||
'otis-auckland-dog-walking-review',
|
||||
'wallace-auckland-dog-walking-review',
|
||||
'one-on-one-dog-portrait-1',
|
||||
'one-on-one-dog-portrait-2',
|
||||
'one-on-one-dog-portrait-3',
|
||||
'small-medium-dogs-pack-walk',
|
||||
'auckland-pack-walk-small-dogs-group',
|
||||
'founder-image-aless-goodwalk'
|
||||
];
|
||||
|
||||
const dirs = ['src/lib/images', 'static/images'];
|
||||
const MAX_WIDTH = 1600;
|
||||
|
||||
let totalOrig = 0;
|
||||
let totalNew = 0;
|
||||
for (const dir of dirs) {
|
||||
for (const name of targets) {
|
||||
const png = join(dir, name + '.png');
|
||||
const jpg = join(dir, name + '.jpg');
|
||||
try {
|
||||
const orig = (await stat(png)).size;
|
||||
const buf = await sharp(png)
|
||||
.rotate()
|
||||
.resize({ width: MAX_WIDTH, withoutEnlargement: true })
|
||||
.jpeg({ quality: 82, mozjpeg: true, progressive: true })
|
||||
.toBuffer();
|
||||
await writeFile(jpg, buf);
|
||||
await unlink(png);
|
||||
totalOrig += orig;
|
||||
totalNew += buf.length;
|
||||
console.log(`${name.padEnd(45)} ${(orig/1024).toFixed(0).padStart(5)}KB png → ${(buf.length/1024).toFixed(0).padStart(4)}KB jpg`);
|
||||
} catch (err) {
|
||||
console.error('FAILED', png, err.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(`\nTotal: ${(totalOrig/1024/1024).toFixed(2)} MB → ${(totalNew/1024/1024).toFixed(2)} MB`);
|
||||
Reference in New Issue
Block a user