前端后端数据流转为图片(微信小程序)
获取后端流的请求responseType必须使用arraybuffer
将后端数据刘转换为base64再转换为本地图片
html与data
-
//
-
-
<van-image width="460rpx" height="460rpx" src="{{codeImg}}" />
-
-
-
//
-
data={
-
codeImg: '',
-
}
简单版
-
async getImage(codeUrl) {
-
-
let res = await wepy.request({
-
url: 'url',
-
method: 'POST',
-
data: {
-
data,
-
},
-
header: {
-
'Content-Type': 'application/json;charset=UTF-8',
-
Authorization: sessionToken,
-
},
-
responseType: 'arraybuffer',
-
});
-
-
if (res) {
-
var binary = '';
-
var bytes = new Uint8Array(res);
-
for (var len = bytes.byteLength, i = 0; i < len; i ) {
-
binary = String.fromCharCode(bytes[i]);
-
}
-
let dataStr = window.btoa(binary);
-
this.codeImg = "data:image/png;base64," dataStr;
-
}
-
-
}
微信小程序不支持btoa()函数,
btoa() 方法用于创建一个 base-64 编码的字符串。
插入函数base64_encode;
完整版
-
/*
-
responseType: 'arraybuffer',
-
-
*/
-
async getImage(codeUrl) {
-
let res = await wepy.request({
-
url: '请求路径',
-
method: 'POST',
-
data: {
-
data,
-
},
-
header: {
-
'Content-Type': 'application/json;charset=UTF-8',
-
Authorization: sessionToken,
-
},
-
responseType: 'arraybuffer',
-
});
-
-
if (res) {
-
var binary = '';
-
var bytes = new Uint8Array(res);
-
for (var len = bytes.byteLength, i = 0; i < len; i ) {
-
binary = String.fromCharCode(bytes[i]);
-
}
-
let dataStr = this.base64_encode(binary);
-
let code = dataStr; // 后台返回的base64图片,没有带data:image/png;base64,的前缀。
-
let src = `data:image/png;base64,${code}`;
-
const fsm = wx.getFileSystemManager(); // 获取文件管理器
-
code = code.replace(/\ /g, ''); //去掉空格方法
-
code = code.replace(/[\r\n]/g, '');
-
-
const buffer = wx.base64ToArrayBuffer(code); // 将 base64 字符串转成 ArrayBuffer 对象
-
const fileName = wx.env.USER_DATA_PATH '/share_img.png'; // 文件系统中的用户目录路径 (本地路径)
-
/**
-
* @param fileName: 文件路径
-
* @param buffer : 要写入的文本或二进制数据
-
* @param binary: 指定写入文件的字符编码
-
*/
-
fsm.writeFileSync(fileName, buffer, 'binary'); // 写入文件, 同步方法
-
this.codeImg = fileName;
-
}
-
-
}
-
base64_encode(str) {
-
var c1, c2, c3;
-
var base64EncodeChars =
-
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /';
-
var i = 0,
-
len = str.length,
-
string = '';
-
-
while (i < len) {
-
c1 = str.charCodeAt(i ) & 0xff;
-
if (i == len) {
-
string = base64EncodeChars.charAt(c1 >> 2);
-
string = base64EncodeChars.charAt((c1 & 0x3) << 4);
-
string = '==';
-
break;
-
}
-
c2 = str.charCodeAt(i );
-
if (i == len) {
-
string = base64EncodeChars.charAt(c1 >> 2);
-
string = base64EncodeChars.charAt(
-
((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)
-
);
-
string = base64EncodeChars.charAt((c2 & 0xf) << 2);
-
string = '=';
-
break;
-
}
-
c3 = str.charCodeAt(i );
-
string = base64EncodeChars.charAt(c1 >> 2);
-
string = base64EncodeChars.charAt(
-
((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)
-
);
-
string = base64EncodeChars.charAt(
-
((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6)
-
);
-
string = base64EncodeChars.charAt(c3 & 0x3f);
-
}
-
return string;
-
}
引用:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfjaag
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01