12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- const Koa = require('koa')
- const Router = require('koa-router');
- const serve = require('koa-static')
- const app = new Koa()
- const router = new Router()
- const gifInfo = require('./config/gifInfo');
- const gifEncoder = require('gifencoder');
- const Canvas = require('canvas');
- const fs = require('fs');
- const path = require('path')
- router.get('/getgif', async (context, next) => {
- let start = Date.now();
- let query = context.query;
- let task = query.task
- let textArr = query.text.split(",")
- let target = gifInfo[task]
- if(target) {
- textArr.forEach((n, i) => {
- target.textArr[i].text = n
- })
-
- var ctxW = target.width;
- var ctxH = target.height;
- var encoder = new gifEncoder(ctxW, ctxH);
- console.log(`正在生成gif...`);
- encoder.createReadStream().pipe(fs.createWriteStream(`dist/${task}.gif`));
- encoder.start();
- encoder.setRepeat(0);
- encoder.setDelay(1);
- encoder.setQuality(10);
- var canvas = new Canvas(ctxW, ctxH);
- var ctx = canvas.getContext('2d');
- function drawText(ctx, text, x, y) {
- ctx.fillStyle = "#ffffff";
- ctx.font = "16px Arial";
- ctx.textAlign = "center";
- ctx.fillText(text, x, y)
- }
- var imgObj = new Canvas.Image()
- for (let i = 0; i <= target.size; i++) {
- imgObj.src = `res/${task}/image-${i}.png`
- ctx.drawImage(imgObj, 0, 0, ctxW, ctxH)
- target.textArr.forEach(n => {
- if(i >= n.arr[0] && i < n.arr[1]) {
- drawText(ctx, n.text, ctxW / 2, ctxH - 6)
- }
- })
- encoder.addFrame(ctx)
- }
- encoder.finish()
- let ms = Date.now() - start;
- console.log(`成功生成,耗时:${ms}ms`);
- context.body = {
- gifurl: `${task}.gif`
- }
- // next()
- }
-
- });
- app.use(serve(__dirname + '/dist'));
-
- app.use(router.routes())
- app.use(router.allowedMethods())
- const http = require('http');
- http.createServer(app.callback()).listen(4008);
- console.log(`start server, listen: 4008`);
|