将图像二进制数据转换为img标签
turn image binary data into img tag
当我向路由发送post请求时,我有
/generate/image
我得到类似:var file =
����JFIF��C��C��� ��
�����+�}Yϭ�F39M>���������>���;��ˋ��uXʽ�w�ڤx'-[2g��k�S���H���m
[�V?[_W����#��v��}6�[��F�F�%����n�...
在客户端I do:
var blob = new Blob([file], {type: 'image/png'});
var reader = new FileReader();
reader.onload = function (e) {
$('#result').attr('src', e.target.result);
};
reader.readAsDataURL(blob);
但是我得到一个损坏的图像
我能做什么?
编辑:如果我做
img.src = 'data:image/png;base64,' + btoa(file);
我:
Uncaught InvalidCharacterError: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
请不要使用base64,浪费带宽和CPU按原样发送图像二进制并使用Ajax正确处理它们。您不应该以字符串的形式获得结果。设置xhr responseType为blob或使用fetch的blob方法。
fetch("/generate/image").then(res => res.blob())
当你有blob时,不要使用文件阅读器将其转换为url。
使用URL.createObjectURL (blob)
在你的后端,你可以这样做:
var fs = require('fs');
fs.readFile(path to image from you file, 'base64', function(err, buf){
/* Here you can send your base64 image data to client. Your base64 data is in buf.
I am using socket. You can just send. Read more about readFile function*/
socket.emit('image upload', { image: true, buffer: buf });
});
当我的客户端从套接字接收数据时,我调用函数:
socket.on('image upload', function(data){
displayImage(data);
});
var displayImage = function(data){
var URL = 'data:image/jpg;base64,'+data.buffer;
document.querySelector('#img-id').src = URL;
};
然后图像将显示在img标签中。
相关文章:
- 我应该如何在 UL 内触发 IMG 标签的点击
- Grails-设置g:点击img标签选择值
- JavaScript on Click 事件在 img 标签上无法正常工作
- 在容器中,我有文本和 img 标签,如何仅使用 js 或 jquery 获取文本
- 如何在单击“提交”按钮后使文本区域和 IMG 标签只读
- javascript 将 IMG 标签中的图像转换为 标签中的实际链接图像
- 当在 img 标签中提到类时,Href 不起作用
- 使用 javascript 从图像数组中更改 img 标签 src.骰子游戏
- 捕获 img 标签并更改图像
- jQuery 按 ID 名称删除 img 标签不起作用
- 在 javascript 中调用 img 标签
- 在 jQuery 中获取 IMG 标签的 ID
- 如何访问嵌套在 h1 标签中的 img 标签元素
- HTML Img 标签使用 Javascript 重新加载
- 在 img 标签上叠加图形边框
- 如何在TR的最后一个TD中添加事件或将ID属性添加到IMG标签
- 安卓:在 img 标签中显示捕获的图像
- 我收到错误.我需要创建 img 标签
- 如何使用jquery添加img标签的alt属性
- 将图像从 img 标签的 src 上传到 php