import { promises as fs } from 'fs' import { createCanvas, GlobalFonts, Image } from '@napi-rs/canvas' import { pngQuantize } from '@napi-rs/image' import fetch from 'node-fetch' const canvas = createCanvas(1200, 700) const ctx = canvas.getContext('2d') ctx.globalCompositeOperation = 'destination-over' const FONT_URL = `https://github.com/Brooooooklyn/canvas/raw/main/__test__/fonts/iosevka-slab-regular.ttf` if (!GlobalFonts.families.some(({ family }) => family === 'Iosevka Slab')) { const font = await fetch(FONT_URL, { redirect: 'follow', follow: 10, }).then((res) => res.arrayBuffer()) GlobalFonts.register(Buffer.from(font)) } ctx.fillStyle = 'white' ctx.font = '48px Iosevka Slab' const Title = '@napi-rs/image' ctx.fillText(Title, 80, 100) const Arrow = new Image() Arrow.src = Buffer.from(` Optimized Images .png .avif .jpg .webp Raw Images .jpg .png .tiff .ico .pnm .bmp .tga .hdr .dxt `) ctx.drawImage(Arrow, 80, 60) const ViceCityGradient = ctx.createLinearGradient(0, 0, 1200, 0) ViceCityGradient.addColorStop(0, '#3494e6') ViceCityGradient.addColorStop(1, '#EC6EAD') ctx.fillStyle = ViceCityGradient ctx.fillRect(0, 0, 1200, 700) fs.writeFile( 'public/img/og.png', await pngQuantize(await canvas.encode('png'), { maxQuality: 90, minQuality: 75, }), )