欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 小程序的一些总结:画canvas和内嵌webview

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:738

高端HTML5响应式企业通用网

2020-05-06   浏览:520

html5响应式外贸网站英文版

2020-05-08   浏览:509

HTML5自适应律师工作室类网

2020-04-04   浏览:502

HTML5影视传媒文化公司类网

2020-05-12   浏览:497

小程序的一些总结:画canvas和内嵌webview

发布时间:2020-09-29  

做了一些小程序项目,着重记录一下小程序内嵌webview以及小程序画canvas遇到的一些坑。

 

小程序画canvas的坑

第一个坑,canvas无法画base64格式的二维码。

需求:前端将一些动态数据,以及动态生成的小程序二维码图片用canvas画出来,最后生成且可保存的一张图片。

 

前端显示二维码图片一般有两种方法:

 

1.后端调用微信api,直接返回的二进制数据到前端会乱码,一般后端先将二进制数据转为base64格式数据,然后返回到前端。若是当普通的图片显示只需要设置图片:

 

<image src=http://www.yiyongtong.com/archives/"data:image/png;base64,图片base64数据"></image> 

2.后台在服务器上将二进制数据保存为一张图片,然后返回给前端一个二维码的绝对路径。

 

若后台因为各种原因不好实现第2种,且第1种方法微信官方的回复是:真机上小程序的canvas无法绘制base64格式的图片,难道就无法在canvas里绘制二维码了?

 

此时还有第3种方法就是利用小程序的文件系统 FileSystemManager.writeFile() Api,将base64数据的图片写入到本地,之后去操作这个本地的图片。

 

第一步创建写入文件的文件夹

mkdir() {

    return new Promise((resolve, reject) => {

        this.fs.access({ // 先判断有没有resource目录

            path: `${wx.env.USER_DATA_PATH}/resource`, // wx.env.USER_DATA_PATH获取本地文件路径,开发者工具是:"",真机是:"wxfile://usr"

            success: (res) => {

                console.log('access:',res)

                resolve(res)

            },

            fail: (err) => {

                console.error('access:',err)

                // 不存在,创建一个文件夹

                this.fs.mkdir({

                    dirPath: `${wx.env.USER_DATA_PATH}/resource`,

                    success: (res) => {

                        console.log('mkdir:', res)

                        resolve(res)

                    }, 

                    fail: (err) => {

                        console.error(err)

                        reject(res)

                    }

                })

            }

        })

    })

}

复制代码

第二步将base64图片写入创建的文件夹

writeBase64Image() {

    return this.mkdir().then(() => {

        return new Promise((resolve, reject) => {

            this.fs.writeFile({

                filePath: `${wx.env.USER_DATA_PATH}/resource/${this.openId}.png`, // 可以用openId来命名此图片

                data: this.base64Code, //后台返回的base64编码的图片,不需要加'data:image/png;base64,'

                encoding: 'base64', // 存的文件类型的选择base64

                success:(res) => {

                    console.log('writeFile:', res)

                    resolve(res) 

                },

                fail:(err) => {

                    console.error('writeFile:',err)

                    reject(err)

                }

            })

        })

    })

}

复制代码

第三步获得图片的缓存临时地址

如果是绝对路径的网络图片,绘制图片前需要将图片缓存到本地,如果是写入的本地文件则可以直接绘制。

 

getImageSrc(src) {

        return new Promise((resolve, reject) => {

本文标签

:备案管家服务帮您把复杂流程变简单,解决您在进行网站备案过程中遇到的效率低下和成功率不高的问题。个人300/2个域名,企业500/5个域名,qq1650004.