美文网首页
微信小程序生成海报图,并完美适配

微信小程序生成海报图,并完美适配

作者: 磨人的磨磨虫 | 来源:发表于2019-02-20 18:19 被阅读8次

小程序像素单位是rpx,而canvas用的是px ,在这里我先用 wx.getSystemInfo 去获取屏幕的width,写一个获取屏幕比例函数,代码如下

var getRatio=()=>{

    let w=0

    wx.getSystemInfo({

      success: function (res) {

        w = res.windowWidth / 375;//按照750的屏宽

      },

    })

    return w

  }

继续下一步:

此处代码则是自己使用canvas画出海报,此步省略,注意你已经获取了 屏比 ,你在画的时候只要乘以getRatio()就能解决海报在不同屏幕的大小,

const ctx = wx.createCanvasContext('myCanvas')

.......

.....

....

继续下一步需要生成海报图,代码如下:

首先获取手机权限:

wx.getSetting({

      success: (res) => {

        if (typeof res.authSetting['scope.writePhotosAlbum'] == 'undefined') {

          // 未授过权

          wx.authorize({

            scope: 'scope.writePhotosAlbum',

            success: () => {

              this.getPic()

            }

          });

        } else if (res.authSetting['scope.writePhotosAlbum'] === false) {

          wx.showModal({

            title: '提示',

            content: '保存失败,请开启相册权限保存?',

            success: res => {

              if (res.confirm) {

                // 已拒绝过授权,则打开设置界面引导用户开启授权

                wx.openSetting({

                  success: res => {

                    if (res.authSetting['scope.writePhotosAlbum']) {

                      this.getPic()

                    }

                  }

                });

              } else if (res.cancel) {

                // console.log('用户点击取消')

              }

            }

          })

        } else {

          this.getPic()

        }

      }

    })

获取到用户相机权限之后需要使用wx.canvasToTempFilePath生成图片并且需要生成本地图片(这里是小程序的限制,下载图片不支持网络图),代码如下:

getPic() {

    wx.showToast({

      title: '海报保存中...',

      icon: 'loading',

      duration: 2000,

      mask:true

    });

    setTimeout(() => {

      wx.canvasToTempFilePath({

        x: 0,

        y: 0,

        width: 750,

        height: 1334,

        destWidth: 750,

        destHeight: 1334,

        quality: 1,

        canvasId: 'myCanvas',

        fileType: 'png',

        success: res => {

          //生成本地图

          wx.saveImageToPhotosAlbum({

            filePath: res.tempFilePath,

            success: res => {

              wx.hideLoading();

              wx.showToast({

                title: '保存成功',

              });

            },

            fail() {

              wx.hideLoading()

            }

          })

        }

      })

    }, 500);

  }

注:此内容是我在项目中稍做一个记录,便以日后开发提供快速的思路,如果有帮到你不胜荣幸

相关文章

网友评论

      本文标题:微信小程序生成海报图,并完美适配

      本文链接:https://www.haomeiwen.com/subject/uqjqzftx.html