对于前端来说,图片展示一般是再简单不过,就是使用img
标签绑定src
属性即图片地址即可。
但现在有了新需求变化,后端返回的不是一般的图片地址(http://xxx.xxx.xxx.jpg),而是图片流,大致如下:
![](https://img.haomeiwen.com/i18700915/7174f59e7425a600.png)
平常我们转base64
都是有图片的网络地址,类似如下
let img = new Image();
img.src = 'https://xxx.xxx.xxx.com/attachments/image/202207/big_101381_87959.png';
img.onload = () => {
let canvas = document.createElement('canvas');
canvas.width = width || img.width;
canvas.height = height || img.height;
let ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
let base64URL = canvas.toDataURL("image/png", 1);
}
那如果是图片流
,又该如何展示呢?
首先图片流
可直接使用img
标签进行展示,如下
<img src='/api/getUserImg/86759573' >
想要转换图片流
就得先拿到图片流
,所以这里请求时和平时有略微不一样,需要加一个请求类型,以axios
为例如下:
axios({
method: 'get',
url: url,
responseType: 'arraybuffer' // 这里必须加上类型,以便拿到数据后进行转换
})
拿到数据之后就可以使用Blob
和FileReader
来进行转换了,完整代码如下
axios({
method: 'get',
url: url, // 请求地址
responseType: 'arraybuffer' // 这里必须加上类型,以便拿到数据后进行转换
}).then(res=>{
let blob = new Blob( [res.data], { type: 'png' } )
let fileReader= new FileReader();
fileReader.readAsDataURL( blob );
fileReader.onloadend = ( e ) => {
let basr64Url = e.target.result;
};
})
到这里图片流
转base64
格式就介绍完了,大家还有什么更好的办法吗,欢迎留言~~~
网友评论