前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序生成图片并保存

小程序生成图片并保存

作者头像
九旬
发布2020-10-23 15:49:23
2.6K0
发布2020-10-23 15:49:23
举报
文章被收录于专栏:九旬大爷九旬大爷九旬大爷

自己做过几个小程序生成图片并保存的功能,觉得做这个功能用到的还挺多的,记录一下。

总体可以分为:

  • 前端处理:后端返回数据,前端自己将图片、文字等画到 canvas 上,然后转图片。
  • 后端处理:后端直接返回图片,前端只做保存功能。

#前端处理

#绘制 Canvas 并保存

小程序有强大的 canvas 可以转成图片并保存,具体API看 文档

但是 canvas 的原生操作过于啰嗦,比如画一个字上去:

const ctx = wx.createCanvasContext('myCanvas')

ctx.setFontSize(20)
ctx.fillText('Hello World', 20, 20)
ctx.setFillStyle('red')

ctx.draw()

在这里我推荐一个库:wx_poster 可以简化操作.

wx_poster.inits(function (){ 
    wx_poster.setFont(Hello World',{
        size: 20,
        color: 'red',
        x: 20,
        y: 20
    })
})

最后将 canvas 转成图片并保存就行了

// 在ctx.draw() 之后后调用
wx.canvasToTempFilePath({
  x: 100,
  y: 200,
  width: 50,
  height: 50,
  destWidth: 100,
  destHeight: 100,
  canvasId: 'myCanvas',
  success(res) {
    console.log(res.tempFilePath)
        wx.saveImageToPhotosAlbum({ // 保存到相册
        filePath: res.tempFilePath,
        success: function (res) {
          wx.showToast({
              title: '保存成功',
          })
        },
        fail: function (err) {
          console.log(err)
        }
    })
  }
})

#后端处理

整个图片都是后端返回的,前端只管保存就行了。

#返回 base64 数据显示图片并保存

后端返回 base64 格式的情况

var imgSrc = this.data.imgSrc.slice(23); // 这里是把 data:image/png;base64,  这一段去除)
var save = wx.getFileSystemManager();
var number = Math.random() * 10;
save.writeFile({
    filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.jpg',
    data: imgSrc,
    encoding: 'base64',
    success: res => {
    wx.saveImageToPhotosAlbum({ // 保存到相册
        filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.jpg',
        success: function (res) {
        wx.showToast({
            title: '保存成功',
        })
        },
        fail: function (err) {
        console.log(err)
        }
    })
    console.log(res)
    },
    fail: err => {
    console.log(err)
    }
})
//   参考:https://www.cnblogs.com/china-fanny/p/11213746.html

#保存网络图片到本地

返回网络图片并保存

  saveToPhone: function (e) {
    wx.downloadFile({
      url: '', // 网络图片地址
      success: res => {
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: (data) => {
            console.log(data)
          },
          fail: (err) => {
            console.log(err);
          },
        })
      }
    })
  }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • #前端处理
    • #绘制 Canvas 并保存
    • #后端处理
      • #返回 base64 数据显示图片并保存
        • #保存网络图片到本地
        相关产品与服务
        云开发 CloudBase
        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档