后端直接返回二进制图片、前端src显示

1、解析一个项目,a标签的src文件地址,你如果直接去request,会发现返回的是一个二进制文件
�PNG =>例如这样的
在这里插入图片描述

百度了文章全是巴拉巴拉的,直接解决:

ajax增加属性: xhrFields: { responseType: “arraybuffer” },
在这里插入图片描述
在这里插入图片描述

 var binary = "";
        var bytes = new Uint8Array(result);
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
          binary += String.fromCharCode(bytes[i]);
        }
        console.log();
        that.imgSrc = "data:img/png;base64," + window.btoa(binary);

我的就可以了

虽然网上巴拉巴拉的,但记录一下,万一以后用到呢,嘿嘿

图片转base64

function getBase64Image(img) {
     var canvas = document.createElement("canvas");
     canvas.width = img.width;
     canvas.height = img.height;
     var ctx = canvas.getContext("2d");
     ctx.drawImage(img, 0, 0, img.width, img.height);
     var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
     var dataURL = canvas.toDataURL("image/" + ext);
     return dataURL;
 }
 (() => {
	let img = new Image();
     img.setAttribute('crossOrigin', 'anonymous');
     //网络图片地址
     img.src = 'http://666.itshare.club/1603509156777';
     img.onload = () => {
         let getBase64Str = getBase64Image(img);
     }
 })()

base64转二进制流

function dataURLtoBlob(dataurl) {
     var arr = dataurl.split(','),
         mime = arr[0].match(/:(.*?);/)[1],
         bstr = atob(arr[1]),
         n = bstr.length,
         u8arr = new Uint8Array(n);
     while (n--) {
         u8arr[n] = bstr.charCodeAt(n);
     }
     // return new Blob([u8arr], {
     //     type: mime
     // });
     return u8arr
 }
function getBase64Image(img) {
     var canvas = document.createElement("canvas");
     canvas.width = img.width;
     canvas.height = img.height;
     var ctx = canvas.getContext("2d");
     ctx.drawImage(img, 0, 0, img.width, img.height);
     var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
     var dataURL = canvas.toDataURL("image/" + ext);
     return dataURL;
 }
 (() => {
	let img = new Image();
     img.setAttribute('crossOrigin', 'anonymous');
     //网络图片地址
     img.src = 'http://666.itshare.club/1603509156777';
     img.onload = () => {
     	//获得base64
         let getBase64Str = getBase64Image(img);
         //获得二进制流
         let getBlobStr = dataURLtoBlob(getBase64Str)
     }
 })()

使用atob()函数用于解码使用 base-64 编码的字符串
将二进制流转成图片
算了,偷点懒偷点懒

前端上传图片 base64转二进制上传

var dataURItoBlob = function (dataURI) {
        var byteString = atob(dataURI.split(',')[1]);
        var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
        var ab = new ArrayBuffer(byteString.length);
        var ia = new Uint8Array(ab);
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
        }
        return new Blob([ab], {type: mimeString});
    },
var fd = new FormData(),
var fname = (new Date().getTime()) + parseInt(Math.random() * 1000, 10) + ".jpg",
var blob = dataURItoBlob("data:image/jpg;base64," + that.imgEditerPlugin.encodeBase64());

fd.append("file", blob, fname);
$.ajax({
    contentType: false,
    cache: false,
    url: uploadUrl,
    type: "POST",
    processData: false,
    data: fd
}).then(function(){
);
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript 可以使用 `FileReader` 对象来解析后端返回二进制图片。首先,使用 `XMLHttpRequest` 或 `fetch` 来获取图片二进制数据。然后,使用 `FileReader` 的 `readAsArrayBuffer` 方法将二进制数据读取到 ArrayBuffer 中。最后,使用 `URL.createObjectURL` 将 ArrayBuffer 转换为可用于图片元素的 URL。 示例代码: ``` const xhr = new XMLHttpRequest(); xhr.open("GET", "path/to/image.jpg", true); xhr.responseType = "arraybuffer"; xhr.onload = function(e) { if (this.status === 200) { const blob = new Blob([this.response], {type: "image/jpeg"}); const url = URL.createObjectURL(blob); const img = document.createElement("img"); img.src = url; document.body.appendChild(img); } }; xhr.send(); ``` 注意:在使用完 URL.createObjectURL 方法创建出来的 URL 之后,需要使用 URL.revokeObjectURL 方法来释放这个 URL,避免内存泄漏。 ### 回答2: 在前端中,可以使用JavaScript解析后端返回二进制图片。首先,需使用XMLHttpRequest对象发送异步请求来获取后端返回二进制数据。通过设置XMLHttpRequest的responseType为'arraybuffer',确保获取到的数据以数组缓冲区的形式返回。 接下来,可以通过创建一个Blob对象,将后端返回二进制数据存储在其中。Blob可以看作是一个不可修改的二进制数据对象。可以使用Blob对象的构造函数,将从服务器接收到的二进制数据传递给它。 在创建完Blob对象后,可以使用URL.createObjectURL()方法生成一个URL,该URL可以用于指向Blob对象内容的临时链接。这个临时链接可以作为图片src属性值,直接图片显示在网页中。 最后,可以创建一个Image对象,将临时链接作为其src属性值。当浏览器加载这个链接时,就会自动将Blob对象转换为图像,并显示在页面上。 综上所述,通过上述步骤,我们可以使用JavaScript解析后端返回二进制图片,将其显示前端页面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值