31 lines
832 B
JavaScript
31 lines
832 B
JavaScript
|
|
|
|
import { execFileSync } from "node:child_process";
|
|
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import sharp from "sharp";
|
|
|
|
const svg = readFileSync("public/favicon.svg");
|
|
const sizes = [16, 32, 48];
|
|
const tmp = mkdtempSync(join(tmpdir(), "favicon-"));
|
|
|
|
try {
|
|
const pngs = [];
|
|
for (const s of sizes) {
|
|
const out = join(tmp, `${s}.png`);
|
|
|
|
await sharp(svg, { density: 384 })
|
|
.resize(s, s, { fit: "contain", background: { r: 0, g: 0, b: 0, alpha: 0 } })
|
|
.png()
|
|
.toFile(out);
|
|
pngs.push(out);
|
|
}
|
|
|
|
|
|
execFileSync("magick", [...pngs, "public/favicon.ico"], { stdio: "inherit" });
|
|
console.log(`wrote public/favicon.ico (${sizes.join(", ")} px)`);
|
|
} finally {
|
|
rmSync(tmp, { recursive: true, force: true });
|
|
}
|