uniapp 图片转base64格式

1、创建文件夹

(1)base64.js 是图片转base64

/**
 * @description 本地图片转base64方法(兼容APP、H5、小程序)
 * @param {number} path 图片本地路径
 * @returns Promise对象
 */
const toBase64 = (path) => {
	return new Promise((resolve, reject) => {
		// #ifdef APP-PLUS
		plus.io.resolveLocalFileSystemURL(path, (entry) => {
			entry.file((file) => {
				let fileReader = new plus.io.FileReader()
				fileReader.readAsDataURL(file)
				fileReader.onloadend = (evt) => {
					let base64 = evt.target.result.split(",")[1]
					resolve(base64)
				}
			})
		})
		// #endif
		// #ifdef H5
		uni.request({
			url: path,
			responseType: 'arraybuffer',
			success: (res) => {
				resolve(uni.arrayBufferToBase64(res.data))
			}
		})
		// #endif
		// #ifdef MP-WEIXIN
		uni.getFileSystemManager().readFile({
			filePath: path,
			encoding: 'base64',
			success: (res) => {
				resolve(res.data)
			}
		})
		// #endif
	})
}

export {
	toBase64
}

(2)base64src.js 是base64转图片

const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src'; //自定义文件名

function base64src(base64data, cb) {
  const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
  if (!format) {
    return (new Error('ERROR_BASE64SRC_PARSE'));
  }
  const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
  const buffer = wx.base64ToArrayBuffer(bodyData);
  fsm.writeFile({
    filePath,
    data: buffer,
    encoding: 'binary',
    success() {
      cb(filePath);
    },
    fail() {
      return (new Error('ERROR_BASE64SRC_WRITE'));
    },
  });
};
module.exports = base64src;

2、需要使用的文件引入

引入base64.js

 引入base64src.js

var base64src = require('./common/base64src')

 3、方法中使用

base64.js

// 下面将图片本地路径转base64
convert.toBase64(res.tempFilePaths[index]).then((res) => {
		that.getAccessToken(res)
})

base64src.js

var shareQrImg = `data:image/png;base64,` + path;


base64src(shareQrImg, resCurrent => {
		console.log(resCurrent) // 返回图片地址,直接赋值到image标签即可
		this.imgUrl = resCurrent
})

猜你喜欢

转载自blog.csdn.net/2301_76882889/article/details/130503916