微信小程序-上传图片转base64

最近业务需要:将图片转为base64格式。
so~~~;百度n多资料最后写成,还是有一点小bug就是生成的图片不太清晰;
文章最后还有代码的下载地址

参考资料:
微信小程序文档-wx.canvasGetImageData
UPNG.js下载地址
代码奉上:
wxml

<!-- wxml -->
<button bindtap='fetch'>上传</button>
<canvas canvas-id='myCanvas' style="width: 400px; height: 500px;"></canvas>
<image src='{{b64}}'></image>

js
这里需要引入一些转base64的js

const upng = require('../../utils/UPNG.js')
//可以在上面的参考资料里进行下载
fetch() {
    const ctx = wx.createCanvasContext('myCanvas')
    const platform = wx.getSystemInfoSync().platform
    const imgWidth = 400, imgHeight=500;
    wx.chooseImage({
      success: res => {
      //生成的图片临时路径画成canvas
        ctx.drawImage(res.tempFilePaths[0], 0, 0, imgWidth, imgHeight)
        ctx.draw(false, () => {
          wx.canvasGetImageData({
            canvasId: 'myCanvas',
            x: 0,
            y: 0,
            width: imgWidth,
            height: imgHeight,
            success: res => {
              if (platform === 'ios') {
                // 兼容处理:ios获取的图片上下颠倒 
                res = this.reverseImgData(res)
              } 
              // 3. png编码
              let pngData = upng.encode([res.data.buffer], res.width, res.height)
              // 4. base64编码
              let base64 = wx.arrayBufferToBase64(pngData)
              // console.log('data:image/jpeg;base64,' + base64)
              this.setData({
                b64: 'data:image/jpeg;base64,' + base64
              });
            },
            fail(res) {
              console.log(res)
            },
          })
        })
      }
    })
  },
  //ios图片处理 
  reverseImgData(res) {
    var w = res.width
    var h = res.height
    let con = 0
    for (var i = 0; i < h / 2; i++) {
      for (var j = 0; j < w * 4; j++) {
        con = res.data[i * w * 4 + j]
        res.data[i * w * 4 + j] = res.data[(h - i - 1) * w * 4 + j]
        res.data[(h - i - 1) * w * 4 + j] = con
      }
    }
    return res
  },

下载地址:https://download.csdn.net/download/weixin_38023551/10513997
参考资料:https://github.com/zh8637688/wx-cardscanner

微信小程序可以通过wx.request方法实现图片上传,而带参数的base64图片上传需要先将base64编码换为文件流并附加参数,然后再发送请求上传。以下是实现过程的示例代码: 1. 将base64编码换为文件流 ``` // 将base64编码换为文件流 function base64ToFile(base64Data, fileName) { const array = wx.base64ToArrayBuffer(base64Data) const filePath = `${wx.env.USER_DATA_PATH}/${fileName}` wx.getFileSystemManager().writeFile({ filePath, data: array, encoding: 'binary', success: () => { console.log('base64文件流成功') return filePath }, fail: () => { console.log('base64文件流失败') return null } }) } ``` 2. 将文件流和参数一起上传 ``` // 上传图片 function uploadImage(filePath, params) { const token = wx.getStorageSync('token') const header = { 'Authorization': `Bearer ${token}`, 'content-type': 'multipart/form-data' } wx.uploadFile({ url: 'https://example.com/upload', filePath: filePath, name: 'file', formData: params, header: header, success: (res) => { console.log('上传成功', res) }, fail: (res) => { console.log('上传失败', res) } }) } ``` 3. 调用函数进行上传 ``` const base64Data = 'data:image/png;base64,iVBORw0KGg...'; const fileName = 'image.png'; const params = {param1: 'value1', param2: 'value2'}; const filePath = base64ToFile(base64Data, fileName); uploadImage(filePath, params); ``` 注意:上传文件需要在开发者工具中设置“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”选项。在真机上测试时,需要在小程序管理后台的“开发设置”中添加上传图片的域名。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值