UniApp 用canvas生成图片保存本地

2020-12-25  本文已影响0人  年轻人不喝鸡汤

第一步:先定义一个canvas标签,如下。

<view class="select">
  <canvas canvas-id="myCanvas" id="myCanvas"/>
<view>

第二步:获取图片在view中的高度和宽度,uni获取高度和宽度的方法,如下。

let view = uni.createSelectorQuery().in(this);
view.select('#myCanvas').boundingClientRect(response => {}).exec();

response中就会返回一个指定的标签的宽高,还有一些top、buttom,的值。

第三步:生成canvas的图片,代码如下。

uni.getImageInfo({
  src: this.image,
  success: (response) => {
        const canvas = uni.createCanvasContext('myCanvas', this);
        const windowWidth = wx.getSystemInfoSync().windowWidth;
    canvas.clearRect(0, 0, windowWidth, 300);
    canvas.drawImage(response.path, 0, 0, 200, 200);
    canvas.draw();
  }
})

this.image:这个就是你要生成的图片。

第四步:把生成的canvas图片保存到本地,如下。

        uni.showModal({
                    title: '提示',
                    content: '确定保存到相册吗',
                    success: (response) => {
                        uni.canvasToTempFilePath({
                            x: windowWidth / 2 - 150,
                            y: 0,
                            height: 300,
                            width: 300,
                            canvasId: 'myCanvas',
                            success: (response) => {
                                uni.saveImageToPhotosAlbum({
                                    filePath: response.tempFilePath,
                                    success: (response) => {
                                     console.log(response);
                                    },
                                    fail: (response) => {
                                     uni.openSetting({
                                        success: (response) => {
                                            if(!response.authSetting['scope.writePhotosAlbum']) {
                                                nui.showModal({
                                                    title: '提示',
                                                    content: '获取权限成功,再次点击图片即可保存',
                                                    showCancel: false
                                                })
                                            } else {
                                                nui.showModal({
                                                    title: '提示',
                                                    content: '获取权限失败,无法保存',
                                                    showCancel: false
                                                })
                                            }
                                        }
                                     })
                                    }
                                })
                            },
                            fail: (response) => {
                                console.log(response);
                            }
                        }, this);
                    }
                })

uni.canvasToTempFilePath({},this)这个方法要加this,在APP端,uni.canvasToTempFilePath方法需要放在convasContext.draw的回调里面,否则会一直报canvas is empty。
做完这些就已经保存到本地了

上一篇下一篇

猜你喜欢

热点阅读