微信小程序> 小程序图片转Base64,方法总结。

小程序图片转Base64,方法总结。

浏览量:926 时间: 来源:Aleyn.

小程序图片转base64

前言:看了很多博客没一个能解决问题的,小程序社区也逛了个遍,依然找不到小程序图片在本地转base64的方法,凡事还得靠自己啊,接下来就把所有方法做个总结,作为一个野生程序员,好东西绝对要分享。

如果不想了解踩坑历史的话,直接看第四种方法就可以了。

如果不想了解踩坑历史的话,直接看第四种方法就可以了。

如果不想了解踩坑历史的话,直接看第四种方法就可以了。

第一种方法

先上代码

var uploadImage = this.data.imageList[0]var reader = new FileReader()reader.onload = function (e) {      var arrayBuffer = reader.result;      var base64 = wx.arrayBufferToBase64(arrayBuffer)}reader.readAsArrayBuffer(new Blob(this.data.imageList)) 

代码看起来似乎没有问题,but~~~~~,人家微信根本就没提供 FileReader()这个方法,所以,这个方法在小程序这里,直接pass掉就行了,不可行。

第二种方法

这个方法很好,代码也是最易懂的。

首先,获取本地图片的临时路径

wx.chooseImage({      success:res={        this.urlTobase64(res.tempFilePaths[0])       }})

接下来,把临时路径作为一个请求的url,把数据返回格式设置成arraybuffer,上代码。

urlTobase64(url){    wx.request({      url:url,      responseType: 'arraybuffer', //最关键的参数,设置返回的数据格式为arraybuffer      success:res={      //把arraybuffer转成base64            let base64 = wx.arrayBufferToBase64(res.data);                         //不加上这串字符,在页面无法显示的哦            base64 = 'data:image/jpeg;base64,' + base64                         //打印出base64字符串,可复制到网页校验一下是否是你选择的原图片呢            console.log(base64)           }    }) }

校验base64字符串是否是你选择的图片

到这可以看到控制台成功打印出base64字符串,在网页上校验也是你选择的图片,一切看起来是那么的美好,兄dei,先把你的笑容收起来,在开发者工具的模拟器上没问题,你在真机上试一试,就会发现请求报错了,我知道你想说,你特么知道有问题还写这干啥,别激动兄dei,先把刀放下。马上给你介绍可用的方法。

第三种方法

先说思路:这个方法是通过,小程序的Canvas绘图实现的,获取到图片后,把图片绘制到canvas上,然后通过wx.canvasGetImageData()方法获取到图片的png编码,在把png编码转成base64,对Canvas还不是太了解的同学可以先去,开发者文档上熟悉一下。

    wx.chooseImage({      count: 1,      success: res = {        //获取图片的宽高        wx.getImageInfo({          src: res.tempFilePaths[0],          success: res = {            this.setData({              imgWidth: res.width,              imgHeight: res.height            })          }        })        canvas = wx.createCanvasContext('canvas')                canvas.drawImage(res.tempFilePaths[0], 0, 0, this.data.imgWidth, this.data.imgHeight) // 1. 绘制图片至canvas        // 绘制完成后执行回调        canvas.draw(false, () = {          // 2. 获取图像数据          wx.canvasGetImageData({            canvasId: 'canvas',            x: 0,            y: 0,            width: this.data.imgWidth,            height: this.data.imgHeight,            success(res) {              // 3. png编码              let pngData = upng.encode([res.data.buffer], res.width, res.height)              // 4. base64编码              let base64 = wx.arrayBufferToBase64(pngData)              console.log(base64)              // ...            }          })        })      }    })

经过上边的代码我们也可以把图片转成base64,但是,问题一大堆啊有木有,图片显示不全,有的只转了一部分,或者IOS真机图片显示颠倒。有没有解决的办法呢,肯定是有的了。直接把cardscanner文件夹放在你的项目中。
然后新建一个界面,分别引用cardscanne中的文件。最下方下载资源

index.wxml文件引用cardscanner.wxml

import src="../../cardscanner/cardscanner.wxml" /template is="cardscanner" /

index.wxss文件引用cardscanner.wxss

@import '../../cardscanner/cardscanner.wxss'

下边是index.js里边的内容。

import CardScanner from '../../cardscanner/cardscanner.js'Page({  onLoad(options) {    let that = this    this.imgPath = options.imgPath    this.cardScanner = new CardScanner(this)      .on('ImageChanged', (imgPath) = {        that.imgPath = imgPath        console.log(imgPath)      })      .on('DecodeStart', (imgPath) = {        wx.showLoading({          title: '生成中',          mask: true        })      })      .on('DecodeComplete', (res) = {        if (res.code == 1) {        //这里返回转过的base64字符串,打印查看        let base64 = 'data:image/jpeg;base64,' + res.data          console.log(base64)          //做你要做的操作          // ....          // ....        } else {          console.log('解析失败:' + res.reason)        }        wx.hideLoading()      })  },  onReady() {    this.cardScanner.setImage(this.imgPath)  }})

以上是你新建界面的内容,直接复制j就行,注意修改文件引用路径,让你用最快的方式,把功能添加到项目中,如果有不同需求可以自己修改。

先上图片。

这是引用文件成功后的页面,点击选择按钮,选择图片。
小程序

这是选择完图片,把图片放在画布上的状态。
小程序

然后再点击确定按钮,正在生成的状态,由于时间稍微有点长,所以加了等待框。
小程序

这是转换成功后的控制台输出。在真机远程测试的输出。
小程序

看评论里有需求demo的在此也提供一下。直接用开发者工具打开就行了。
项目地址。

备用地址

经本人测试,基本没什么问题,唯一的缺陷就是转base64时间稍微有一点长,不过已经加等待框提示了,也不是什么大问题。

第四种

还记得第一种吗?微信没有提供操作文件的方法。 最近微信更新文档了,我也赶紧跑过来更新博客,也是操碎了心啊~~,好消息来了,微信终于出文件操作相关API了。而且这次很给力。我已经迫不及待想尝试一遍了。如下图:
小程序
获取到FileSystemManager,然后调用他的readFile()或者readFileSync(),参数如下:

小程序

支持的编码格式如下:
小程序

一下上了这么多看着就酸爽,哈哈~。
那我们要把图片转base64不是小菜一碟吗~~。

    wx.chooseImage({      success: res = {      wx.getFileSystemManager().readFile({          filePath: res.tempFilePaths[0], //选择图片返回的相对路径          encoding: 'base64', //编码格式          success: res = { //成功的回调            console.log('data:image/png;base64,' + res.data)          }        })//以下两行注释的是同步方法,不过我不太喜欢用。        //let base64 = wx.getFileSystemManager().readFileSync(res.tempFilePaths[0], 'base64')         //console.log(base64)      }    })

注意版本库要在1.9.9以后的版本才支持,注意版本控制。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎