48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
/**
|
|
* Rasterise les SVG Ultimail (PNG + JPG) pour usage hors navigateur / réseaux sociaux.
|
|
* Dépendance : sharp (devDependency).
|
|
*/
|
|
import { readFileSync } from "node:fs"
|
|
import { dirname, join } from "node:path"
|
|
import { fileURLToPath } from "node:url"
|
|
import sharp from "sharp"
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
const root = join(__dirname, "..")
|
|
|
|
const jobs = [
|
|
{ input: join(root, "public/ultimail-mark.svg"), outBase: "ultimail-mark", w: 256, h: 256 },
|
|
{
|
|
input: join(root, "public/brand/ultimail-wordmark-horizontal.svg"),
|
|
outBase: "ultimail-wordmark-horizontal",
|
|
w: 1600,
|
|
h: 460,
|
|
},
|
|
{
|
|
input: join(root, "public/brand/ultimail-wordmark-stacked.svg"),
|
|
outBase: "ultimail-wordmark-stacked",
|
|
w: 800,
|
|
h: 800,
|
|
},
|
|
]
|
|
|
|
async function main() {
|
|
const outDir = join(root, "public/brand")
|
|
for (const job of jobs) {
|
|
const buf = readFileSync(job.input)
|
|
const resize = { width: job.w, height: job.h, fit: "contain", background: { r: 255, g: 255, b: 255, alpha: 1 } }
|
|
await sharp(buf).resize(resize).png({ compressionLevel: 9 }).toFile(join(outDir, `${job.outBase}.png`))
|
|
await sharp(buf)
|
|
.resize(resize)
|
|
.flatten({ background: "#ffffff" })
|
|
.jpeg({ quality: 92, mozjpeg: true })
|
|
.toFile(join(outDir, `${job.outBase}.jpg`))
|
|
console.log(`Wrote ${job.outBase}.png / .jpg`)
|
|
}
|
|
}
|
|
|
|
main().catch((e) => {
|
|
console.error(e)
|
|
process.exit(1)
|
|
})
|