[英]Using JavaScript to display a Blob
我正在从数据库中检索 Blob 图像,我希望能够使用 JavaScript 查看该图像。以下代码会在页面上生成损坏的图像图标:
var image = document.createElement('image');
image.src = 'data:image/bmp;base64,'+Base64.encode(blob);
document.body.appendChild(image);
这是一个包含所有所需代码的 jsFiddle ,包括 blob。 完成的代码应正确显示图像。
您还可以直接从 XMLHttpRequest 获取 BLOB 对象。 将 responseType 设置为 blob 可以解决问题。 这是我的代码:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost/image.jpg");
xhr.responseType = "blob";
xhr.onload = response;
xhr.send();
响应函数如下所示:
function response(e) {
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL(this.response);
document.querySelector("#image").src = imageUrl;
}
我们只需要在 HTML 中创建一个空的图像元素:
<img id="image"/>
如果您想改用 fetch:
var myImage = document.querySelector('img');
fetch('flowers.jpg').then(function(response) {
return response.blob();
}).then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});
来源:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
您可以将字符串转换为Uint8Array以获取原始数据。 然后为该数据创建一个Blob并传递给URL.createObjectURL(blob)以将 Blob 转换为您传递给img.src的 URL。
var data = '424D5E070000000000003E00000028000000EF...';
// Convert the string to bytes
var bytes = new Uint8Array(data.length / 2);
for (var i = 0; i < data.length; i += 2) {
bytes[i / 2] = parseInt(data.substring(i, i + 2), /* base = */ 16);
}
// Make a Blob from the bytes
var blob = new Blob([bytes], {type: 'image/bmp'});
// Use createObjectURL to make a URL for the blob
var image = new Image();
image.src = URL.createObjectURL(blob);
document.body.appendChild(image);
您可以在以下位置尝试完整示例: http : //jsfiddle.net/nj82y73d/
在您的示例中,您应该createElement('img')
。
在您的链接中, base64blob != Base64.encode(blob)
。
只要您的数据有效http://jsfiddle.net/SXFwP/ (我没有任何 BMP 图像,所以我不得不使用 PNG),这就有效。
我猜您在图像的内联代码中有错误。 试试这个 :
var image = document.createElement('img'); image.src="data:image/gif;base64,R0lGODlhDwAPAKECAAAAzMzM/////wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrLlN48CXF8m2iQ3YmmKqVlRtW4MLwWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw=="; image.width=100; image.height=100; image.alt="here should be some image"; document.body.appendChild(image);
问题是我有十六进制数据需要在 base64encoded 之前转换为二进制。
在 PHP 中:
base64_encode(pack("H*", $subvalue))
在小提琴中,您的 blob 不是 blob,而是十六进制数据的字符串表示形式。 在 blob 上试试这个,你就完成了
var image = document.createElement('img');
let reader=new FileReader()
reader.addEventListener('loadend',()=>{
let contents=reader.result
image.src = contents
document.body.appendChild(image);
})
if(blob instanceof Blob) reader.readAsDataURL(blob)
readAsDataURL 为您提供一个 base64 编码的图像,为您准备好图像元素 () 源 (src)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.