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

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

作者: 磨人的磨磨虫 | 来源:发表于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