在JavaScript中将图像十六进制转换为base64

在JavaScript中将图像十六进制转换为base64,javascript,image,base64,hex,converters,Javascript,Image,Base64,Hex,Converters,我正在寻找一种将十六进制图像(例如十六进制格式的jpg)转换回base64的方法,以便在网页中显示图像 我一直在使用下面的代码处理较小的图像,但对于出现max-call-stack-excelled错误的较大图像,它失败了 src下面是十六进制格式的图像源 test.img = new Image(); test.img.src = "data:image/jpg; base64," + hexToBase64(src); function hexToBase64(str) { ret

我正在寻找一种将十六进制图像(例如十六进制格式的jpg)转换回base64的方法,以便在网页中显示图像

我一直在使用下面的代码处理较小的图像,但对于出现max-call-stack-excelled错误的较大图像,它失败了

src下面是十六进制格式的图像源

test.img = new Image();
test.img.src = "data:image/jpg; base64," + hexToBase64(src);

function hexToBase64(str) {
    return btoa(String.fromCharCode.apply(null, str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")));
}

通过将十六进制字符串转换为数组,并使用
函数中的
apply
方法将其作为参数数组提供给,将生成“超出最大调用堆栈”错误。prototype

由于存在实际限制,因此该方法适用于小文件,而不适用于大文件

重构代码是必要的。作为未经测试的基本解决方案

function hexToBase64(str) {
    var bString = "";
    for( var i = 0; i < str.length; i +=2) {
         bString += String.fromCharCode( parseInt( str.substr( i, 2), 16));
    }
    return btoa(bString);
}
函数hexToBase64(str){
var bString=“”;
对于(变量i=0;i

可能会提供一些想法。

是否有理由使用十六进制字符串格式?在大多数情况下,只要使用Blob、File或ArrayBuffer(TypedArray)对象就可以逃脱,这似乎很奇怪。但是“超过最大调用堆栈”的消息往往来自一个失控的递归函数,我在这里没有看到。这正是我得到的。src的格式是带有各种字符标记的标题,然后是数据。例如,报头的前4个字符是3238,转换为28。28是下一步要处理的字符数,其中包含文件名,在本例中为66696E69973686C6F6F702E706E67。如果有更好的方法来处理这个问题,我将非常感激了解它。格式正是我一直被赋予的!我去试试,然后回去报告