#!/usr/bin/env node /** * Simple SVG -> PNG converter using sharp. * Usage: node svg2png.mjs */ import fs from "node:fs/promises"; import path from "node:path"; import sharp from "sharp"; async function main() { const [, , inPath, outPath, wArg, hArg] = process.argv; if (!inPath || !outPath || !wArg || !hArg) { console.error("Usage: node svg2png.mjs "); process.exit(1); } const width = Number(wArg); const height = Number(hArg); if (!width || !height) { console.error("Width and height must be numbers"); process.exit(1); } const absIn = path.resolve(inPath); const absOut = path.resolve(outPath); const svg = await fs.readFile(absIn); // Render with background white to avoid transparency issues in slides const png = await sharp(svg, { density: 300 }) .resize(width, height, { fit: "contain", background: { r: 255, g: 255, b: 255, alpha: 1 } }) .png({ compressionLevel: 9 }) .toBuffer(); await fs.mkdir(path.dirname(absOut), { recursive: true }); await fs.writeFile(absOut, png); console.log(`Wrote ${absOut} (${width}x${height})`); } main().catch(err => { console.error("svg2png failed:", err?.message || err); process.exit(1); });