IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 微信小程序 canvas生成海报 -> 正文阅读

[JavaScript知识库]微信小程序 canvas生成海报

最近遇到个需求,需要根据一个指定的页面,生成图片并且进行保存,大致就是需要在canvas上画出来和当前页面一样内容,然后转存为图片这样。
准备工作 先获取到canvas对象

const query = wx.createSelectorQuery()
query.select('#myCanvas')
.fields({
  node: true,
  size: true
})
.exec((res) => {
  const canvas = res[0].node
  const ctx = canvas.getContext('2d')
  const dpr = wx.getSystemInfoSync().pixelRatio;
  canvas.width = 640 * dpr
  canvas.height = 865 * dpr
  ctx.scale(dpr, dpr)
})

绘制文字

ctx.save()
ctx.font = 'normal normal 26px SourceHanSerifCN';
ctx.fillStyle = '#928e93';
ctx.fillText("绘制的文字内容", 88, 790);
ctx.restore();

绘制自动换行的文字

let tempText = "我是需要换行的文字\n我的内容很长很长很长很长很长"
let textList = tempText.split("\n")
let bookLength = 12
let bookSize = 36
let bookLine = 48
if(tempText.length>=50){
  bookLength = 13
  bookSize = 34
  bookLine = 46
}
if(tempText.length>=90){
  bookLength = 15
  bookSize = 30
  bookLine = 40
}
if(tempText.length>=150){
  bookLength = 17
  bookSize = 26
  bookLine = 36
}
for (let i = 0; i < textList.length; i++) {
  let item = textList[i]
  let MaxLength = 0
  let MaxIndex = 0
  let tempItem = item.split("")
  tempItem.forEach((items,index)=>{
    if (items.match(/[^\x00-\xff]/ig) != null){
      MaxLength+=2
    }else{
      MaxLength+=1
    }
    if(MaxLength<=bookLength*2){
      MaxIndex = index
    }
  })
  if (MaxLength > bookLength*2) {
    textList[i] = item.substring(0, MaxIndex);
    textList.splice(i + 1, 0, item.substring(MaxIndex, item.length))
  }
}
ctx.save()
ctx.font = "normal " + bookSize + "px 'SourceHanSerifCN'";
ctx.fillStyle = '#413e44';
let booksTop = 180
if (textList.length >= 4) {
  booksTop = 114
}
if (textList.length >= 6) {
  booksTop = 104
}
textList.forEach((item, index) => {
  ctx.fillText(item, 86, (booksTop + index * bookLine));
})
ctx.restore();

绘制矩形

ctx.save()
ctx.fillStyle = '#f0f1f1'
ctx.fillRect(435, 685, 124, 124)
ctx.restore();

绘制图片

const bg = canvas.createImage();
bg.src = "../../static/image/xxxx.png"
bg.onload = function () {
  ctx.drawImage(bg, 0, 0, 640, 865);
}

绘制用户头像(头像绘制需要先画个圆,然后在圆左上角位置开始绘制头像,画圆的时候是圆的中心点开始画的)

const avatar = canvas.createImage();
let avatorSrc = "我是头像地址"
avatar.src = avatorSrc
avatar.onload = function () {
  ctx.save()
  ctx.arc(117, 589, 29, 0, 2 * Math.PI)
  ctx.clip()
  ctx.drawImage(avatar, 88, 560, 58, 58)
  ctx.restore();
}

最好差不多了,就可以生成图片,并且对图片进行保存了

wx.canvasToTempFilePath({
  x: 0,
  y: 0,
  width: 640,
  height: 865,
  destWidth: 640 * 4,
  destHeight: 865 * 4,
  canvas: canvas,
  fileType: 'png',
  quality: 100,
  success: function (res) {
    console.log("保存图片到相册", res);
    wx.saveImageToPhotosAlbum({ //保存图片到相册
      filePath: res.tempFilePath,
      success: function () {
        wx.hideLoading()
        wx.showToast({
          title: "保存图片成功!",
          duration: 2000
        })
      },
      fail() {
        wx.showToast({
          title: "保存失败!",
          icon: 'none',
          duration: 2000
        })
        wx.hideLoading()
      }
    })
  },
  fail(e) {
    wx.hideLoading()
    console.log("失败", e)
  }
})
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:37:40  更:2022-04-30 08:39:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:12:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码