json2canvas:使用JSON生成小程序海报

港控/mmm° 2021-12-22 04:51 479阅读 0赞

摘要: 简单的开源工具。

  • 作者:诗人的咸鱼
  • 原文:小程序生成分享海报,一个json就够了。同时支持web

Fundebug经授权转载,版权归原作者所有。

需求

在项目里写过几个canvas生成分享海报页面后,觉得这是个重复且冗余的工作.于是就想有没有能通过类似json直接生成海报的库.

然后就在github找到到两个项目:

  • wxa-plugin-canvas,不太喜欢配置文件的写法.就没多去了解
  • mp_canvas_drawer,使用方式就比较符合直觉,不过可惜功能有点少.

然后就想着能不能自己再造个轮子.于是就有了这个项目 json2canvas,你可以简单的理解为是mp_canvas_drawer的增强版吧.

json2canvas canvas绘制海报,写个json就够了.

项目的canvas绘制是基于cax实现的.所以天然的带来一个好处,json2canvas同时支持小程序和web

功能

  • 支持缩放. 如果设计稿是750,而画布只有375时.你不需要任何换算,只需要将scale设置为0.5即可.
  • 支持文本(长文本自动换行,感谢 coolzjy@v2ex 提供的正则 https://regexr.com/4f12l ,优化了换行的计算方式(不会粗暴的折断单词))
  • 支持图片(圆角)
  • 支持圆型,矩形,矩形圆角
  • 支持分组(cax里很好用的一个功能)
  • 同时支持小程序和web

示例

web-demo 界面左边的json,可以进行编辑,直接看效果哟~

小程序-demo

  1. git clone https://github.com/willnewii/json2canvas.git
  2. 微信开发者工具导入项目 example/weapp/

小程序安装

  1. npm i json2canvas
  2. 微信开发者工具->工具->构建npm

在需要使用的界面引入Component

  1. {
  2. "usingComponents": {
  3. "json2canvas":"/miniprogram_npm/json2canvas/index"
  4. }
  5. }

效果图

想要生成一个这样的海报,需要怎么做?(红框是图片元素,蓝框是文字元素,其余的是一张背景图。)

2019-06-29-01.jpeg

一个json就搞定.具体支持的元素和参数,请查看项目readme

  1. {
  2. "width": 750,
  3. "height": 1334,
  4. "scale": 0.5,
  5. "children": [
  6. {
  7. "type": "image",
  8. "url": "http://res.mayday5.me/wxapp/wxavatar/tmp/bg_concerts_1.jpg",
  9. "width": 750,
  10. "height": 1334
  11. }, {
  12. "type": "image",
  13. "url": "http://res.mayday5.me/wxapp/wxavatar/tmp/wxapp_code.jpg",
  14. "width": 100,
  15. "x": 48,
  16. "y": 44,
  17. "isCircular": true,
  18. }, {
  19. "type": "circle",
  20. "r": 50,
  21. "lineWidth": 5,
  22. "strokeStyle": "#CCCCCC",
  23. "x": 48,
  24. "y": 44,
  25. }, {
  26. "type": "text",
  27. "text": "歌词本",
  28. "font": "30px Arial",
  29. "color": "#FFFFFF",
  30. "x": 168,
  31. "y": 75,
  32. "shadow": {
  33. "color": "#000",
  34. "offsetX": 2,
  35. "offsetY": 2,
  36. "blur": 2
  37. }
  38. }, {
  39. "type": "image",
  40. "url": "http://res.mayday5.me/wxapp/wxavatar/tmp/medal_concerts_1.png",
  41. "width": 300,
  42. "x": "center",
  43. "y": 361
  44. }, {
  45. "type": "text",
  46. "text": "一生活一场 五月天",
  47. "font": "38px Arial",
  48. "color": "#FFFFFF",
  49. "x": "center",
  50. "y": 838,
  51. "shadow": {
  52. "color": "#000",
  53. "offsetX": 2,
  54. "offsetY": 2,
  55. "blur": 2
  56. }
  57. }, {
  58. "type": "text",
  59. "text": "北京6场,郑州2场,登船,上班,听到你想听的歌了吗?",
  60. "font": "24px Arial",
  61. "color": "#FFFFFF",
  62. "x": "center",
  63. "y": 888,
  64. "shadow": {
  65. "color": "#000",
  66. "offsetX": 2,
  67. "offsetY": 2,
  68. "blur": 2
  69. }
  70. }, {
  71. "type": "rect",
  72. "width": 750,
  73. "height": 193,
  74. "fillStyle": "#FFFFFF",
  75. "x": 0,
  76. "y": "bottom"
  77. }, {
  78. "type": "image",
  79. "url": "http://res.mayday5.me/wxapp/wxavatar/tmp/wxapp_code.jpg",
  80. "width": 117,
  81. "height": 117,
  82. "x": 47,
  83. "y": 1180
  84. }, {
  85. "type": "text",
  86. "text": "长按识别小程序二维码",
  87. "font": "26px Arial",
  88. "color": "#858687",
  89. "x": 192,
  90. "y": 1202
  91. }, {
  92. "type": "text",
  93. "text": "加入五月天 永远不会太迟",
  94. "font": "18px Arial",
  95. "color": "#A4A5A6",
  96. "x": 192,
  97. "y": 1249
  98. }]
  99. }

问题反馈

有什么问题可以直接提issue

发表评论

表情:
评论列表 (有 0 条评论,479人围观)

还没有评论,来说两句吧...

相关阅读