diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/misc/gen-avatar.ts | 11 | ||||
| -rw-r--r-- | src/server/index.ts | 8 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/misc/gen-avatar.ts b/src/misc/gen-avatar.ts index 7d22ee98e2..14c01a9bd9 100644 --- a/src/misc/gen-avatar.ts +++ b/src/misc/gen-avatar.ts @@ -2,10 +2,11 @@ * Random avatar generator */ -import { createCanvas } from 'canvas'; +const p = require('pureimage'); import * as gen from 'random-seed'; +import { WriteStream } from 'fs'; -const size = 512; // px +const size = 256; // px const n = 5; // resolution const margin = (size / n) / 1.5; const colors = [ @@ -35,9 +36,9 @@ const sideN = Math.floor(n / 2); /** * Generate buffer of random avatar by seed */ -export function genAvatar(seed: string) { +export function genAvatar(seed: string, stream: WriteStream): Promise<void> { const rand = gen.create(seed); - const canvas = createCanvas(size, size); + const canvas = p.make(size, size); const ctx = canvas.getContext('2d'); ctx.fillStyle = bg; @@ -85,5 +86,5 @@ export function genAvatar(seed: string) { } } - return canvas.toBuffer(); + return p.encodePNGToStream(canvas, stream); } diff --git a/src/server/index.ts b/src/server/index.ts index 7d8938d584..b3ca47f232 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -26,6 +26,7 @@ import { program } from '../argv'; import { UserProfiles } from '../models'; import { networkChart } from '../services/chart'; import { genAvatar } from '../misc/gen-avatar'; +import { createTemp } from '../misc/create-temp'; export const serverLogger = new Logger('server', 'gray', false); @@ -73,10 +74,11 @@ router.use(activityPub.routes()); router.use(nodeinfo.routes()); router.use(wellKnown.routes()); -router.get('/avatar/:x', ctx => { - const avatar = genAvatar(ctx.params.x); +router.get('/avatar/:x', async ctx => { + const [temp] = await createTemp(); + await genAvatar(ctx.params.x, fs.createWriteStream(temp)); ctx.set('Content-Type', 'image/png'); - ctx.body = avatar; + ctx.body = fs.createReadStream(temp); }); router.get('/verify-email/:code', async ctx => { |