小程序图片转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', //最关键的参数,设置返回的数据格式为arraybuffersuccess:res=>{//把arraybuffer转成base64let 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 = thisthis.imgPath = options.imgPaththis.cardScanner = new CardScanner(this).on('ImageChanged', (imgPath) => {that.imgPath = imgPathconsole.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.dataconsole.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以后的版本才支持,注意版本控制。

小程序图片转Base64,方法总结。相关推荐

  1. 小程序图片转换Base64格式的三种方法

    一.使用小程序自带的网络请求 1.wx.request() 这种方式适合网络https路径图片,但无法解析wxfile://xxxx导致转化报错 image2Base64(imgUrl) {retur ...

  2. uniapp-微信小程序-图片转base64

    当前在做得小程序设计拍照识别,而服务器方需要前端提供图片的base64编码作为参数进行解析识别,一开始想着走原生JS的base64方法--借助canvas,当然我也试了,就在自己觉得没问题的时候,调试 ...

  3. 微信小程序--图片转base64

    前言 在很多时候,我们需要图片的base64码,一般利用自己封装的function,但是微信小程序中可以利用 wx.getFileSystemManager().readFile 代码 //转base ...

  4. 微信小程序图片变形解决方法

    微信小程序的image标签中有个mode属性,使用aspectFill即可 注:image组件默认宽度300px.高度225px mode 有效值: mode 有 13 种模式,其中 4 种是缩放模式 ...

  5. 微信小程序不显示base64位图片

    我是用uniapp开发,一开始在微信小程序无法显示base64 图片 但是在开发者工具上可以 如果是存在自动换行的话可以使用 xxx.replace(/[\r\n]/g,""); ...

  6. 小程序图片不显示的解决方法

    小程序图片不显示的解决方法 检查图片命名是否为英文 图片是否使用image标签加载的 背景图片不能使用本地图片地址 图片名有没有空格

  7. UNI-APP_开发支付宝小程序注意事项与解决方法,支付宝小程序图片显示问题

    一.编译后,微信小程序上图片图标显示正常,但是一到支付宝小程序图片图标显示就不正常如下图: 微信显示 支付宝显示 官方文档:https://opendocs.alipay.com/mini/compo ...

  8. uni-app微信小程序image引入图片;background-image背景图引入图片;小程序预览本地图片;小程序图片过大引入报错;获取本地图片的网络地址;

    uni-app小程序图片使用有image标签和background-image背景图两种方式: 下有获取本地图片的网络地址方式:见第四步 一.方式一:使用image标签引入: uni-app官方ima ...

  9. 微信小程序图片放大预览效果的实现

    效果预览 效果图有点快,但是可以大致看出来效果了.我再给大家描述下吧 一个页面有3张图片,点击其中任意一张都可以放大预览.然后在预览的时候,左右滑动,还可以看另外两张图片. 话不多说,直接上代码 1, ...

最新文章

  1. 2018-3-31 文章(ELM-Chinese-Brief)原文
  2. fail2ban防止暴力破解
  3. 廖雪峰python教程视频-为什么看不懂廖雪峰的Python学习教程?
  4. oracle 10g 关库,Oracle Db10g 启动和关闭数据库
  5. jquery-表格的增删编辑演练-有一个小bug的
  6. 【tool】kali连接rdp远程桌面
  7. 【转】HashMap,ArrayMap,SparseArray源码分析及性能对比
  8. 解决多个py模块调用同一个python的logging模块,打印日志冲突问题
  9. Python数据分析处理库——Pandas
  10. 20200802每日一句(0729--0802)
  11. 阿里云王伟民:数据库的策略与思考
  12. PySpark: DataProcessing(csv file)
  13. 01. Linux文件目录结构及存放内容(功能)
  14. 搭建Flutter-iOS开发环境
  15. Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件
  16. IDC网络传输优化的罪与罚
  17. 期一完全的备份和星期四_星期四:备份您的东西
  18. 【显著性检测】基于HC算法实现图像显著性检测附MATLAB代码
  19. 思想的对象-The objects of thought
  20. Spring AOP官网学习

热门文章

  1. Linux自学篇——linux命令英文全称及解释
  2. 托攻击的多种攻击方式-----WZW托攻击学习日记(五)
  3. linux v4l2架构分析之v4l2_ctrl_handler初始化及添加v4l2_ctrl的过程分析
  4. python操作excel编号自增加1
  5. Addressable资源热更新疑问
  6. 【1.7】docker —— 容器
  7. AE模板自媒体频道订阅点赞模板网络视频点赞订阅图形动画
  8. POJ2248 Addition Chains(迭代加深搜索)
  9. HTML配色工具!在线配色工具
  10. C语言中6HZ怎么算,C语言基础课First作业