Введение
Base64 - это метод представления, который представляет двоичные данные на основе 64 печатных символов. Поскольку 2 равна 64 мощности 6, каждые 6 битов - это единица, соответствующая определенному печати. Три байта имеют 24 бита, соответствующие 4 единицам Base64, то есть 3 байта должны быть представлены 4 символами печати. Он может быть использован в качестве кодирования передачи электронных писем. Печатные символы в Base64 включают буквы AZ, AZ и числа 0-9, поэтому всего 62 символа. Два других печатных символа варьируются в разных системах, как правило, + и / /.
Принцип преобразования
Прямой источник данных Base64 является бинарной последовательности. Конечно, вы также можете преобразовать изображения, текст и аудио и видео в двоичные последовательности, а затем преобразовать их в кодирование Base64. Здесь мы обсуждаем, как преобразовать бинарный в кодирование Base64 и следить за тем, как преобразовать изображения, текст и аудио и видео в двоичные последовательности.
Перед преобразованием определите таблицу индекса, которая указывает, как преобразовать:
При преобразовании мы сначала группируем бинарные последовательности, и каждые 6 бит являются группой. Однако, если количество закодированных байтов не может быть делит на 3, то в конце концов будет 1 или два байта. Вы можете использовать следующий метод для его обработки: сначала используйте значение 0-байтового значения, чтобы составить наверняка, чтобы его можно было делить на 3, а затем кодирование BASE64. Добавьте одно или два числа '=' в кодированный текст Base64, чтобы представить количество байтов, которые должны быть заполнены. То есть, когда в последнем 6-битном базовом 64-байтовом блоке остается октет, существует четыре бита от 0 значения, а в конце прикреплены два равных знака; Если в последнем 6-битном базовом базовом блоке осталось два октета, существует два бита от 0 значения, и в конце прикреплен равный знак. Обратитесь к следующей таблице:
JavaScript реализует Base64
Как только принцип будет понят, его будет легко реализовать.
Определите (функция (require, exports, module) {var code = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrStuvwxyz0123456789+/". Dipl (""); // index table/** @aixiangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrangrang.com. Кодирование * @param {string} * @return {string} */ function bintobase64 (bitstring) {var result = ""; хвост); 2); 0; bitstring.length - хвост * 2); str.charcodeat (i) .toString (2); (var i = 0; i <bin.length; i += 8) {result += string.fromChode (parseint (bin.substr (i, 8), 2); Bintostr (base64tobin (str));BASE64 Кодирование данных изображения
Чтобы преобразовать данные изображения в Base64, вы должны сначала получить двоичные данные изображения. Двоичные данные изображения могут быть получены через интерфейс Canvas. Конкретная реализация:
функция getCanvas (w, h) {var c = document.createElement ('canvas'); C.width = W; C.height = h; return c;} функция getPixels (img) {var c = getCanvas (img.width, img.height); var ctx = c.getContext ('2d'); ctx.drawimage (img, 0, 0); return ctx.getimagedata (0, 0, c.width, c.height);}После получения двоичных данных изображения, следующим шагом является кодирование его. Потому что изображение содержит не только информацию о пикселях, но и информацию о длине и ширине. Следовательно, при кодировании информации о пикселях, информация о ширине и высоте также должна быть закодирована в соответствии с определенным соглашением. Я справился с этим так:
Преобразовать пиксельные численные данные изображения в двоичную последовательность; Объедините информацию о ширине и высоте в $$width,height$$ чтобы преобразовать ее в двоичную последовательность; Объедините бинарную последовательность информации пикселя изображения и бинарную последовательность ширины и высоты изображения, а затем кодируйте Base64
Конкретная реализация:
function img2base64 (img) {var imgdata = getPixels (img) .data; var imgwidth = getPixels (img) .width; var imgheight = getPixels (img). Хист; var bin = ""; for (var i = 0; i <imgdata.length; i ++) {bin+= base.numtoString (imgdata [i]); } bin = bin + base.stringtobin ("$$" + imgwidth + "," + imgheight + "$$"); return base.bintobase64 (bin);}Декодировать данные изображения Base64
Декодирование - это обратный процесс кодирования. Процесс примерно:
Декодировать информацию Base64 изображения, чтобы получить двоичную последовательность, содержащую информацию о пикселе информации о изображении, ширине и высоте; Затем расшифромите двоичную последовательность в строку, чтобы получить информацию о высоте и ширине; Удалить информацию о высоте и ширине в двоичной последовательности, чтобы получить информацию о пикселях; генерировать пиксельную матрицу на основе информации пикселя; Создать ImageData объекта изображения на основе матрицы пикселей, ширины и высоты; Используйте Putimagedata, чтобы нарисовать изображение.
Реализация конкретного кода:
Функциональная краска (imgdata) {var canvas = document.getElementByid ("myCanvas"); var ctx = canvas.getContext ("2d"); ctx.fillrect (0, 0, imgdata.width, imgdata.height); ctx.putimagedata (imgdata, 0, 0); } function base642img (data) {var str = base.bintoStr (base.base64tobin (data)); var imgwidth = str.match (// $/$ (/d+), (/d+)/$/$$/, "") [1]; var imgheight = str.match (// $/$ (/d +), (/d +)/$/$$/, "") [2] var imgdata = base.base64tobin (data) .replace (base.stringtobin ("$$" + imgwidth + "," + imgheight + "$$") ")"); "); var ImageDataArray = new Uint8clampedArray (imgwidth * imgheight * 4); for (var i = 0; i <imagedataarray.length; i ++) {imagedataarray [i] = parseint (imgdata.substr (i * 8, 8), 2); } вернуть новую ImageData (ImageDataarray, imgwidth, imgheight); }