Javascript — Как уменьшить размер при преобразовании файла изображения в строковые данные Base64?

#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 в том же соотношении.