Преобразование шестнадцатеричного изображения в base64 в JavaScript - PullRequest
0 голосов
/ 03 октября 2018

Я ищу способ конвертировать шестнадцатеричное изображение (например, 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 голосов
/ 03 октября 2018

Ошибка превышения максимального стека вызовов генерируется путем преобразования шестнадцатеричной строки в массив и передачи ее в String.fromCharCode() в качестве массива аргументов с использованием метода apply из Function.prototype.

Существуют практические ограничения на , сколько аргументов может быть передано в вызовах функций JavaScript , поэтому метод может работать для маленьких файлов и не работать для больших.

Рефакторинг кода будетнеобходимо.В качестве непроверенного базового решения

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

может дать некоторые идеи.

...