index.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const Koa = require('koa')
  2. const Router = require('koa-router');
  3. const serve = require('koa-static')
  4. const app = new Koa()
  5. const router = new Router()
  6. const gifInfo = require('./config/gifInfo');
  7. const gifEncoder = require('gifencoder');
  8. const Canvas = require('canvas');
  9. const fs = require('fs');
  10. const path = require('path')
  11. router.get('/getgif', async (context, next) => {
  12. let start = Date.now();
  13. let query = context.query;
  14. let task = query.task
  15. let textArr = query.text.split(",")
  16. let target = gifInfo[task]
  17. if(target) {
  18. textArr.forEach((n, i) => {
  19. target.textArr[i].text = n
  20. })
  21. var ctxW = target.width;
  22. var ctxH = target.height;
  23. var encoder = new gifEncoder(ctxW, ctxH);
  24. console.log(`正在生成gif...`);
  25. encoder.createReadStream().pipe(fs.createWriteStream(`dist/${task}.gif`));
  26. encoder.start();
  27. encoder.setRepeat(0);
  28. encoder.setDelay(1);
  29. encoder.setQuality(10);
  30. var canvas = new Canvas(ctxW, ctxH);
  31. var ctx = canvas.getContext('2d');
  32. function drawText(ctx, text, x, y) {
  33. ctx.fillStyle = "#ffffff";
  34. ctx.font = "16px Arial";
  35. ctx.textAlign = "center";
  36. ctx.fillText(text, x, y)
  37. }
  38. var imgObj = new Canvas.Image()
  39. for (let i = 0; i <= target.size; i++) {
  40. imgObj.src = `res/${task}/image-${i}.png`
  41. ctx.drawImage(imgObj, 0, 0, ctxW, ctxH)
  42. target.textArr.forEach(n => {
  43. if(i >= n.arr[0] && i < n.arr[1]) {
  44. drawText(ctx, n.text, ctxW / 2, ctxH - 6)
  45. }
  46. })
  47. encoder.addFrame(ctx)
  48. }
  49. encoder.finish()
  50. let ms = Date.now() - start;
  51. console.log(`成功生成,耗时:${ms}ms`);
  52. context.body = {
  53. gifurl: `${task}.gif`
  54. }
  55. // next()
  56. }
  57. });
  58. app.use(serve(__dirname + '/dist'));
  59. app.use(router.routes())
  60. app.use(router.allowedMethods())
  61. const http = require('http');
  62. http.createServer(app.callback()).listen(4008);
  63. console.log(`start server, listen: 4008`);