diff options
| author | Adam Soltys <[email protected]> | 2025-07-13 23:05:57 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2025-07-13 23:05:57 -0700 |
| commit | c2d798b8825cc3c5011069f4bcdf2c7dd5234292 (patch) | |
| tree | 4f35b9e0740e74846eac04f0e494f88ac4e1c2c3 /src/routes/(app)/qr | |
| parent | c95e08ff4e582c38489e46414d0e36bbc21e7ea1 (diff) | |
| download | coinos-ui-c2d798b8825cc3c5011069f4bcdf2c7dd5234292.tar.gz coinos-ui-c2d798b8825cc3c5011069f4bcdf2c7dd5234292.zip | |
tap qr
Diffstat (limited to 'src/routes/(app)/qr')
| -rw-r--r-- | src/routes/(app)/qr/[text]/[icon]/+server.ts | 33 | ||||
| -rw-r--r-- | src/routes/(app)/qr/[text]/raw/+server.ts | 1 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/routes/(app)/qr/[text]/[icon]/+server.ts b/src/routes/(app)/qr/[text]/[icon]/+server.ts new file mode 100644 index 00000000..c2825877 --- /dev/null +++ b/src/routes/(app)/qr/[text]/[icon]/+server.ts @@ -0,0 +1,33 @@ +import { createCanvas, loadImage } from "canvas"; +import QRCode from "qrcode"; + +export async function GET({ params }) { + const { icon, text } = params; + const size = 600; + + const canvas = createCanvas(size, size); + await QRCode.toCanvas(canvas, text, { + errorCorrectionLevel: "H", + width: size, + }); + + const ctx = canvas.getContext("2d"); + + const logo = await loadImage(`static/images/${icon}`); + const logoSize = size * 0.3; + ctx.drawImage( + logo, + (size - logoSize) / 2, + (size - logoSize) / 2, + logoSize, + logoSize, + ); + + const buffer = canvas.toBuffer("image/png"); + return new Response(buffer, { + headers: { + "Content-Type": "image/png", + "Cache-Control": "public, max-age=31536000, immutable", + }, + }); +} diff --git a/src/routes/(app)/qr/[text]/raw/+server.ts b/src/routes/(app)/qr/[text]/raw/+server.ts index a24d3a3c..a2626c4d 100644 --- a/src/routes/(app)/qr/[text]/raw/+server.ts +++ b/src/routes/(app)/qr/[text]/raw/+server.ts @@ -14,3 +14,4 @@ export async function GET({ params }) { }, }); } + |
