Основы форматов

Что такое Base64: как картинка превращается в строку текста

Вы открыли HTML-код страницы и наткнулись на гигантскую строку вроде data:image/png;base64,iVBORw0KGgo…, которая тянется на сотни символов. Это и есть Base64 — способ записать картинку обычными буквами и цифрами. Разбираемся без занудства, как это работает и зачем вообще придумали кодировать изображения текстом.

Цветной код на тёмном экране — Base64 превращает данные в текст
Base64 берёт двоичные данные и переписывает их 64 печатными символами. Фото: Pexels

Что такое Base64 простыми словами

Base64 — это способ записать любые данные с помощью всего 64 безопасных символов: латинских букв, цифр и пары знаков. Главное, что нужно понять сразу: Base64 — это не формат картинки. Это кодировка, «обёртка» поверх файла. Сама картинка не меняется — меняется только её запись: вместо непонятных байтов получается длинная строка из букв и цифр, которую можно вставить куда угодно как обычный текст.

Представьте, что вам нужно продиктовать другу содержимое фотографии по телефону. Байты диктовать невозможно — там полно «непечатаемых» значений. А вот строку из букв A–Z, a–z, цифр и пары символов продиктовать реально. Base64 решает ровно эту задачу: переводит «непроизносимые» данные в текст, который спокойно проходит по каналам, рассчитанным только на буквы.

Коротко

Base64 не сжимает и не шифрует. Он просто переписывает байты текстом, чтобы их можно было встроить в HTML, CSS, JSON или письмо. Картинка остаётся той же — растёт только объём самой записи — то есть сколько места она занимает в коде.

Зачем превращать данные в текст

Многие системы исторически умеют работать только с текстом. Электронная почта была придумана для писем из обычных букв (так называемый набор ASCII); JSON — текстовый формат, в котором программы обмениваются данными; адрес страницы (URL) — тоже текст. Если попытаться засунуть в них «сырые» байты картинки, что-нибудь обязательно сломается: один из байтов совпадёт со служебным символом, и данные испортятся.

Base64 — это универсальный переходник. Он гарантирует, что в результате не будет ни одного «опасного» символа, и данные доедут целыми. Именно поэтому кодировку используют десятилетиями: вложения в письмах, токены авторизации, встроенные картинки на веб-страницах — везде, где двоичные данные должны притвориться текстом.

Кстати, сам приём гораздо старше веба. Ещё в 1990-х этот приём встроили в стандарт электронной почты, чтобы пересылать вложения по каналам, которые умели передавать только обычные буквы и цифры. Так что когда вы прикрепляете фотографию к письму, она почти наверняка путешествует к адресату именно в виде Base64 — просто почтовый клиент прячет это от ваших глаз.

Тёмный коридор из светящихся цифр — символ кодирования данных
Любые данные — это поток чисел. Base64 переводит этот поток в читаемые символы. Фото: Pexels

Как это работает: 3 байта → 4 символа

Принцип на удивление простой. Компьютер берёт данные по 3 байта (это 24 бита) и нарезает их не по 8 бит, как обычно, а по 6 бит. Получается ровно четыре кусочка по 6 бит. Каждый такой кусочек — это число от 0 до 63, и для каждого числа в алфавите Base64 есть свой символ.

Разберём на коротком слове Man. Его три буквы в кодах ASCII — это 77, 97 и 110. В двоичном виде: 01001101 01100001 01101110. Перегруппируем по 6 бит: 010011 010110 000101 101110. Это числа 19, 22, 5 и 46. По таблице Base64 им соответствуют символы T, W, F, u. Итог: слово Man превращается в TWFu.

"Man"  →  01001101 01100001 01101110
       →  010011 | 010110 | 000101 | 101110
       →    19   |   22   |   5    |   46
       →    T    |   W    |   F    |   u
"Man"  →  "TWFu"

С картинкой то же самое, только байтов миллионы. Программа просто прогоняет весь файл через этот конвейер «3 байта → 4 символа» от начала до конца — и на выходе получается длинная текстовая строка.

Алфавит и загадочные знаки =

Стандартный алфавит Base64 описан в спецификации RFC 4648 и состоит из 64 символов в строгом порядке: сначала заглавные A–Z (числа 0–25), затем строчные a–z (26–51), потом цифры 0–9 (52–61) и в самом конце два знака — + (62) и / (63).

А что делать, если данные не делятся ровно на 3 байта? Тогда в конце появляются знаки = — это padding, выравнивание. Один = означает, что в последнем блоке было 2 байта, два == — что всего 1 байт. Эти символы не несут данных, они лишь подсказывают декодеру, как правильно восстановить хвост.

Полное имя
Base64 (RFC 4648)
Алфавит
A–Z a–z 0–9 + /
Символов всего
64 + знак =
Блок
3 байта → 4 символа
Сжатие
Нет (кодировка)
Рост размера
≈ +33%

Полезно знать

Есть вариант base64url: в нём + заменён на -, а / — на _. Это нужно, чтобы строку можно было безопасно вставлять в адреса страниц и имена файлов, где символы + и / имеют особый смысл.

Data URI: картинка прямо в адресе

Самое полезное применение Base64 для веба — это data URI (описан в RFC 2397). Обычно картинка подключается ссылкой: src="logo.png", и браузер идёт за файлом на сервер. Data URI переворачивает идею: вместо ссылки на файл прямо в адрес кладут сами данные.

Выглядит он так: data: + тип данных + ;base64, + сама строка. Например:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg
AAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+M9QDwADhgGAWjR9
awAAAABJRU5ErkJggg==">

Браузер видит такой src, понимает «данные внутри уже есть» и рисует картинку без отдельного запроса к серверу. Та же строка работает и в CSS — например, background: url(data:image/png;base64,…). Это и есть способ «вшить» изображение прямо в страницу.

Data URI — это картинка, которая путешествует вместе с кодом, а не лежит отдельным файлом на сервере.
Зелёный поток символов в стиле «Матрицы» — данные, записанные знаками
На выходе Base64 — поток из 64 печатных символов, который машина легко прочитает обратно. Фото: Pexels

Почему текст тяжелее файла

У красивого трюка есть цена. Раз мы кодируем каждые 3 байта четырьмя символами, итоговая строка получается ровно на треть длиннее исходных данных — рост примерно +33%. Картинка на 9 КБ превратится в строку около 12 КБ.

Поэтому Base64 хорош для маленьких вещей — иконок, крошечных фоновых текстур, SVG-значков. Для больших фотографий лишние 33% и потеря кеширования обычно перевешивают выгоду. Подробнее о балансе скорости мы разбираем в статье «Base64-картинки в вебе» и сравниваем с обычными файлами в материале «Base64 против файлов».

64символа в алфавите
+33%рост размера
3→4байта в символы

Как закодировать картинку

Руками считать биты, конечно, никто не будет. Проще всего загрузить файл в онлайн-конвертер и получить готовую строку data URI, которую можно сразу вставить в код.

1

Загрузите изображение

Перетащите PNG в конвертер — ничего устанавливать не нужно.

2

Получите Base64

Конвертер выдаст готовую строку data:image/png;base64,….

3

Вставьте в код

Подставьте строку в src картинки или в CSS-свойство url().

Закодируйте картинку в Base64 прямо сейчас

Бесплатный конвертер FormatZ превратит ваше PNG в готовую строку data URI за пару секунд — прямо в браузере, без установки и регистрации.

Конвертировать PNG в Base64

Если у вас, наоборот, есть строка Base64 и нужно получить из неё обычный файл — поможет обратное преобразование Base64 в PNG. А все доступные конвертеры собраны на странице всех форматов.

Нет. Base64 — это способ кодирования: он превращает любые двоичные данные (в том числе PNG или JPG) в строку из 64 безопасных символов. Картинка остаётся той же, просто записана буквами и цифрами вместо байтов. Поэтому говорить «формат Base64» не совсем точно — это кодировка поверх файла.
Каждые 3 байта данных Base64 кодирует четырьмя символами. Четыре вместо трёх — это рост ровно на треть, примерно +33%. То есть картинка на 9 КБ превратится в строку около 12 КБ. Это плата за то, что данные становятся обычным текстом.
Data URI — это адрес, который содержит сами данные вместо ссылки на файл. Он выглядит как data:image/png;base64,iVBORw0KGgo... и его можно подставить прямо в атрибут src картинки или в CSS. Браузер видит такой адрес и рисует изображение, не делая отдельный запрос к серверу.
Это padding — выравнивание. Base64 работает блоками по 3 байта, и если в конце осталось не кратное трём количество, добавляют один или два знака =. Один = значит, что в последнем блоке было 2 байта, два == — что 1 байт. Они нужны декодеру, чтобы точно восстановить исходные данные.
Проще всего онлайн: загрузите PNG в конвертер FormatZ — получите готовую строку data URI для вставки в код. Обратное преобразование Base64 в PNG возвращает обычный файл изображения, который открывается в любой программе.