• 微信小程序canvas画布绘制base64图片并保存图片到相册中


    WXML部分:
    1. <view class="img_" style="width: 100%;">
    2. <canvas type="2d" id="canvasId" style="width: 100%;height: 100%" >canvas>
    3. <button style="margin: auto;width: 70%;margin-top: 10px;" bindtap="saves">保存图片button>
    4. view>

    样式可以根据自己需求自行调整 

    canvas绘制成图片部分:
    1. //写在接口成功回调中
    2. const fs = wx.getFileSystemManager();
    3. var codeimg = wx.env.USER_DATA_PATH + '/' + '.jpg';
    4. fs.writeFile({
    5. filePath: codeimg,
    6. data: res.data.slice(22), // code就是接口返回的base64数据(分割掉前面的data:image/png;base64,)
    7. encoding: 'base64',
    8. success: () => {
    9. // console.log(codeimg);
    10. wx.createSelectorQuery().select('#canvasId').fields({
    11. node: true,
    12. size: true
    13. })
    14. .exec((res) => {
    15. console.log(res);
    16. let ctx = res[0].node.getContext('2d'); //getContext返回Canvas 的绘图上下文
    17. let canvas = res[0].node;
    18. const bg = canvas.createImage();
    19. //背景图片,可以不进行设置
    20. const image = canvas.createImage();
    21. // 图片高清化
    22. const dpr = wx.getSystemInfoSync().pixelRatio;
    23. res[0].node.width = res[0].node.width * dpr;
    24. res[0].node.height = res[0].node.height * dpr;
    25. // 设置背景图片src
    26. image.src = 'https://pic.imgdb.cn/item/647d31011ddac507cc160e75.jpg'
    27. bg.src = codeimg;
    28. image.onload = function () {
    29. ctx.drawImage(image, 0, 0, 900, 440)
    30. ctx.drawImage(bg, 240, 210, 430, 160);
    31. }
    32. // 将图片保存需要的实例,不写保存可以删除
    33. that.setData({
    34. ctx:canvas
    35. })
    36. })

     

    这就将图片绘制出来了。

    图片保存功能:

    首先获取用户相册权限。
    1. // 检查用户是否已经授权
    2. wx.getSetting({
    3. success: (res) => {
    4. if (!res.authSetting['scope.writePhotosAlbum']) {
    5. // 如果用户未授权,则向用户请求授权
    6. wx.authorize({
    7. scope: 'scope.writePhotosAlbum',
    8. success: () => {
    9. console.log('授权成功')
    10. },
    11. fail: () => {
    12. console.log('授权失败')
    13. }
    14. })
    15. } else {
    16. console.log('已经授权')
    17. }
    18. }
    19. })
    保存功能:
    1. // 保存图片
    2. saves() {
    3. let _this = this;
    4. wx.canvasToTempFilePath({
    5. // 把画布转化成临时文件
    6. x: 0,
    7. y: 0,
    8. width: 380, // 截取的画布的宽
    9. height: 600, // 截取的画布的高
    10. destWidth: 380, // 保存成的画布宽度
    11. destHeight: 600, // 保存成的画布高度
    12. fileType: 'jpg', // 保存成的文件类型
    13. quality: 1, // 图片质量
    14. //如果图片不是2D的话,就需要使用canvasId属性,详情请查看微信小程序官方文档
    15. canvas:_this.data.ctx, // 画布实例
    16. success(res) {
    17. // 2-保存图片至相册
    18. wx.saveImageToPhotosAlbum({
    19. // 存成图片至手机
    20. filePath: res.tempFilePath,
    21. success(res2) {
    22. wx.hideLoading();
    23. wx.showToast({
    24. title: '保存成功',
    25. duration: 2000
    26. });
    27. },
    28. fail(res3) {
    29. if (res3.errMsg === 'saveImageToPhotosAlbum:fail auth deny') {
    30. wx.showToast({
    31. title: '保存失败,稍后再试',
    32. duration: 2000,
    33. icon: 'none'
    34. });
    35. wx.hideLoading();
    36. } else {
    37. wx.showToast({
    38. title: '保存失败,稍后再试',
    39. duration: 2000,
    40. icon: 'none'
    41. });
    42. wx.hideLoading();
    43. }
    44. }
    45. });
    46. },
    47. fail(err) {
    48. console.log(err);
    49. wx.showToast({
    50. title: '保存失败,稍后再试',
    51. duration: 2000,
    52. icon: 'none'
    53. });
    54. wx.hideLoading();
    55. }
    56. });
    57. }

  • 相关阅读:
    Rainbond的 Gateway API 插件制作实践
    Docker从初学到进阶二(使用Docker命令,自定义镜像,部署微服务集群,配置自己的镜像仓库)
    [机缘参悟-53]:阳谋立身,阴谋防身
    启动spark-shell时报错java.lang.NumberFormatException: For input string: “0x100“
    React-4(state、props、表单、通信、生命周期)
    一文读懂:低代码和无代码的演进历程、应用范围
    免费调用快递鸟物流跟踪轨迹订阅接口技术文档
    关于新版的Maven创建Maven项目的时候只有Maven Archetype,而找不到Maven的这个问题
    蓝牙耳机哪个品牌最好?双11平价好用的蓝牙耳机推荐
    mybatis之主键返回
  • 原文地址:https://blog.csdn.net/tong200617/article/details/133837935