#javascript #base64
#язык JavaScript #база 64
Вопрос:
Этот код преобразует файл изображения в строковые данные Base64. Но я хочу уменьшить размер строки base64, потому что размер данных строки base64, которые я преобразовал, больше, чем файл изображения. Возможно ли это?
lt;input id="inputFileToLoad" type="file" accept="image/*" onchange="encodeImageFileAsURL();"/gt; lt;div id="imgTest"gt;lt;/divgt; lt;script type='text/javascript'gt; function encodeImageFileAsURL(){ var filesSelected = document.getElementById("inputFileToLoad").files; var fileSize = filesSelected[0].size; if(fileSize lt; 10000000){ if (filesSelected.length gt; 0){ var fileToLoad = filesSelected[0]; var fileReader = new FileReader(); fileReader.onload = function (fileLoadedEvent){ var srcData = fileLoadedEvent.target.result; // lt;--- data: base64 var newImage = document.createElement('img'); newImage.src = srcData; document.getElementById("imgTest").innerHTML = newImage.outerHTML; alert("Converted Base64 version is " document.getElementById("imgTest").innerHTML); } fileReader.readAsDataURL(fileToLoad); } } else { alert("File exceeded"); } } lt;/scriptgt;
Комментарии:
1. Нет, это не так. По своей природе кодировка base 64 увеличивает размер примерно на ~1/3. Невозможно представить исходные данные с меньшим количеством информации, если вы кодируете их на базе 64. Если вы хотите меньше, вам нужен какой-то алгоритм сжатия.
Ответ №1:
64 равно 2^6(6 бит). Это означает, что каждый символ(8 бит) содержит только 6 бит информации. Таким образом, для передачи такого же объема информации base64 требуется на 33,3% больше битов по сравнению с двоичным кодом.
Единственное, что вы можете сделать, это уменьшить размер исходного изображения перед применением base64, это уменьшит размер строки base64 в том же соотношении.