使用 JavaScript 将二进制数据转换为 base64
Convert binary data to base64 with JavaScript
HTML5使您能够在本地存储数据,我认为这很棒。例如,以下是如何使用它:
var store = window.localStorage;
store.setItem('foo', "hellow world");
var test = store.getItem('foo');
// test should = "hellow world"
在 HTML 中,您可以通过将图像源设置为:
"data:image/jpg;base64," + (base64string)
所以我的问题是如何将二进制数据转换为 base64 字符串,以便我可以利用 html5 本地存储?
例如,如果可以,那就太好了:
$.ajax({
url: 'someImage.png',
type: 'POST',
success: function (r) {
// here I want to convert r to a base64 string !
// r is not binary so maybe I have to use a different approach
var data = ConvertToBase64(r);
document.getElementById("img").src = "data:image/png;base64," + data;
},
});
<小时 />我知道我可以通过使用 html5 将图像包裹在画布上然后将其转换为 base64string 来解决这个问题。 我也可以在服务器上创建一个特定的服务,该服务将发送该图像的 base64 字符串数据 (someImage.aspx)。我只想知道是否可以从服务器检索二进制数据并将其转换为 base64 字符串。
要防止"无效字符错误"错误,您需要执行以下操作:
var base64EncodedStr = btoa(unescape(encodeURIComponent(rawData)));
使用 FileReader 将图像编码为数据 URL:
jQuery.ajax({...})
.done(function (r) {
var reader = new FileReader(
reader.onload = (function(self) {
return function(e) {
document.getElementById("img").src = e.target.result;
}
})(this);
reader.readAsDataURL(new Blob([r]));
});
这是一个老问题,但找不到更好的答案,所以我写下了这个函数。它将 Uint8Array 直接转换为 Base64,而不将其转换为 base64 之前的字符串。希望它能帮助某人。
var encoder = new TextEncoder("ascii");
var decoder = new TextDecoder("ascii");
var base64Table = encoder.encode('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=');
function toBase64(dataArr){
var padding = dataArr.byteLength % 3;
var len = dataArr.byteLength - padding;
padding = padding > 0 ? (3 - padding) : 0;
var outputLen = ((len/3) * 4) + (padding > 0 ? 4 : 0);
var output = new Uint8Array(outputLen);
var outputCtr = 0;
for(var i=0; i<len; i+=3){
var buffer = ((dataArr[i] & 0xFF) << 16) | ((dataArr[i+1] & 0xFF) << 8) | (dataArr[i+2] & 0xFF);
output[outputCtr++] = base64Table[buffer >> 18];
output[outputCtr++] = base64Table[(buffer >> 12) & 0x3F];
output[outputCtr++] = base64Table[(buffer >> 6) & 0x3F];
output[outputCtr++] = base64Table[buffer & 0x3F];
}
if (padding == 1) {
var buffer = ((dataArr[len] & 0xFF) << 8) | (dataArr[len+1] & 0xFF);
output[outputCtr++] = base64Table[buffer >> 10];
output[outputCtr++] = base64Table[(buffer >> 4) & 0x3F];
output[outputCtr++] = base64Table[(buffer << 2) & 0x3F];
output[outputCtr++] = base64Table[64];
} else if (padding == 2) {
var buffer = dataArr[len] & 0xFF;
output[outputCtr++] = base64Table[buffer >> 2];
output[outputCtr++] = base64Table[(buffer << 4) & 0x3F];
output[outputCtr++] = base64Table[64];
output[outputCtr++] = base64Table[64];
}
var ret = decoder.decode(output);
output = null;
dataArr = null;
return ret;
}
试试btoa
函数:
var data = btoa(r);
//dataArr is a Uint8Array
function toBase64(dataArr){
return btoa(dataArr.reduce((data, val)=> {
return data + String.fromCharCode(val);
}, ''));
}
仅供参考,对于使用 node.js 的代码,它只是两个简单的函数调用。为了方便起见,我将它们包装在一个函数中。
export function convertToBase64(bytes) {
return bytes.toString("base64");
}
export function convertFromBase64(str) {
return Buffer.from(str, "base64");
}
现代浏览器的公平和简单的解决方案
fetch('https://picsum.photos/536/354', {
method: 'GET',
})
.then((data) => {
// IMP to convert your json or other response to blob ( for this you have to check your api response is file / binary
return data.blob()
})
.then((data) => {
var reader = new FileReader();
reader.onload = function() {
var b64 = reader.result
console.log("This is base64", b64)
document.getElementById("imagetoShow").src = b64
}
reader.readAsDataURL(data)
})
.catch((error) => {
error.text().then( errorMessage => {
console.log(errorMessage)
})
})
<image src="" width="200" height="200" id="imagetoShow"/>
相关文章:
- 如何使用jquery将base64图像路径转换为真实路径
- 无法在Cordova 4.0 ios中将jpg/jpeg图像转换为Base64
- 如何在不在本地下载的情况下将url中提供的文件(pdf/doc)转换为json/string/base64格式
- Cordova图像选取器转换为base64
- 如何在fabricjs中嵌入图像base64将画布转换为SVG
- 将Byte数组转换为Angularjs中的Base64字符串
- 从 Base64 转换图像时出错 - HTMLImageElement 已损坏
- 将Base64转换为R格式的PNG/JPEG文件
- 将SVG过滤器应用的图像转换为二进制或base64以保存在后端
- 图像大小与其base64字符串转换长度之间的比率是多少
- 将内联SVG转换为Base64字符串
- 如何在 JavaScript 中将文件转换为 base64
- 将图像从 base64 转换为图像并保存在 Django 的数据库中
- 如何使用 javascript 将 png 转换为 base64 字符串
- 如何将 Base64 文件转换为 javascript 中的实际文件/原始文件并将其下载到客户端
- 如何将 Base64 字符串转换为 javascript 文件对象,就像从文件输入表单一样
- 将base64转换为AngularJS中的图像文件
- 将 base64 编码的字节转换为在 Javascript 和 C# 中不同的字符串
- 设置& lt; img>用Javascript转换base64编码的图像失败
- 使用webcam.js转换base64图像时,我得到了损坏的图像