Размер кодированного base64 изображения

Если я преобразую изображение (jpg или png) в base64, оно будет больше или будет иметь такой же размер? Насколько больше это будет?

На моем веб-сайте рекомендуется использовать изображения в кодировке base64?

7 ответов

Решение

Это будет примерно на 37% больше:

Приблизительно, конечный размер двоичных данных в кодировке Base64 равен 1,37 от исходного размера данных.

Источник: http://en.wikipedia.org/wiki/Base64

Это будет больше в base64.

Base64 использует 6 бит на байт для кодирования данных, тогда как двоичный использует 8 бит на байт. Кроме того, у Base64 есть небольшие накладные расходы. Не все биты используются с Base64, потому что он был разработан в первую очередь для кодирования двоичных данных в системах, которые могут правильно обрабатывать только недвоичные данные.

Это означает, что кодированное изображение будет примерно на 25% больше, плюс постоянные накладные расходы для заполнения.

Вот действительно полезный обзор того, когда кодировать в base64, а когда - нет. Автор David Calhoun.

Базовый ответ = сжатые файлы в формате base64 будут примерно сопоставимы по размеру со стандартным двоичным файлом (jpg/png). Gzip'd бинарные файлы будут иметь меньший размер файла.

Вывод = есть некоторое преимущество в кодировании и сжатии значков вашего интерфейса и т. Д., Но неразумно делать это для больших изображений.

Размер base64-изображений

Base64 использует 64 разных символа, и это 2^6. Таким образом, base64 хранит 6 бит на 8-битный символ. Таким образом, соотношение неконвертированных данных к данным base64 составляет 6/8. Это не точный расчет, а приблизительная оценка.

Пример:

Для изображения размером 48 КБ требуется около 64 КБ как преобразованного в base64 изображения.

Расчет: (48 / 6) * 8 = 64

Простой CLI калькулятор в системах Linux:

$ cat /dev/urandom|head -c 48000|base64|wc -c
64843

Или используя изображение:

$ cat my.png|base64|wc -c

base64-изображения и сайты

На этот вопрос гораздо сложнее ответить. Вообще говоря, чем больше изображение, тем меньше смысла при использовании base64. Но учтите следующие моменты:

  • Многие встроенные изображения в HTML-файле или CSS-файле могут иметь похожие строки. Для PNG вы часто находите повторяющиеся буквы "A". Используя gzip (иногда называемый "deflate"), может быть даже выигрыш в размере. Но это зависит от содержания изображения.
  • Служебные запросы HTTP1.1: особенно при большом количестве файлов cookie вы можете легко получить несколько килобайт за каждый запрос. Встраивание изображений base64 может сохранить полосу пропускания.
  • Не кодируйте SVG-изображения в base64, потому что gzip более эффективен в XML, чем в base64.
  • Программирование: На динамически генерируемых изображениях их проще доставлять за один запрос, так как они координируют два зависимых запроса.
  • Глубокие ссылки. Если вы хотите запретить загрузку изображения, извлечь изображение из HTML-страницы немного сложнее.

Так что ответ: это зависит.

Кодирование изображения в base64 увеличит его примерно на 30%.

Смотрите подробности в статье в Википедии о схеме URI данных, где говорится:

URI в кодировке Base64 по размеру на 1/3 больше, чем их двоичный эквивалент. (Однако эти издержки уменьшаются до 2-3%, если HTTP-сервер сжимает ответ с помощью gzip)

Это определенно будет стоить вам больше места и пропускной способности, если вы хотите использовать изображения в кодировке Base64. Однако, если на вашем сайте много маленьких изображений, вы можете уменьшить время загрузки страницы, кодируя ваши изображения в base64 и помещая их в html. Таким образом, клиентскому браузеру не нужно создавать много подключений к изображениям, но они будут иметь html.

Преобразование в base64 просто означает:

Анализируйте двоичные данные, считайте их кусками по 6 бит, а затем преобразуйте в какое-то представление

Примечание: все это просто двоичные данные. Все строки, числа и т. Д. - это просто двоичные данные, хранящиеся в вашей памяти. Как вы это читаете и к чему вы относите это чтение, - это все, что мы делаем.

Эта последовательность из 6 бит имеет стандарт представления (как показано ниже), определенный Base64.

Если входящий поток 000000 -> A, 000001 -> B и так далее.

Теперь представление самого персонажа занимает 8 бит . Поэтому размер ваших данных увеличился до 4/3 от исходного значения, поскольку теперь вы берете еще 2 бита на символ.

Другие вопросы по тегам