在JavaScript中将Image Hex转换为base64

时间:2018-10-02 23:20:09

标签: javascript image base64 hex converters

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

我一直在将下面的代码用于较小的图像,但是对于较大的图像却失败,最大调用堆栈超出了错误。

下面的

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(" ")));
}

1 个答案:

答案 0 :(得分:1)

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

how many arguments can be passed in JavaScript function calls有实际限制,因此该方法适用于较小的文件,而不适用于较大的文件。

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

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);
}

可能提供一些想法。