Use pureimage instead of canvas
This commit is contained in:
		
							parent
							
								
									8c872c6b22
								
							
						
					
					
						commit
						792ec23d7a
					
				
					 3 changed files with 12 additions and 9 deletions
				
			
		|  | @ -104,7 +104,6 @@ | |||
| 		"bootstrap-vue": "2.0.0-rc.13", | ||||
| 		"bull": "3.7.0", | ||||
| 		"cafy": "15.1.1", | ||||
| 		"canvas": "2.4.1", | ||||
| 		"chai": "4.2.0", | ||||
| 		"chalk": "2.4.2", | ||||
| 		"cli-highlight": "2.1.0", | ||||
|  | @ -189,6 +188,7 @@ | |||
| 		"promise-sequential": "1.1.1", | ||||
| 		"pug": "2.0.3", | ||||
| 		"punycode": "2.1.1", | ||||
| 		"pureimage": "0.1.6", | ||||
| 		"qrcode": "1.3.3", | ||||
| 		"random-seed": "0.3.0", | ||||
| 		"randomcolor": "0.5.4", | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
|  |  | |||
|  | @ -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 => { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue