Инструкция

Как перевести картинку в Base64 и обратно: 4 способа

Нужно вставить логотип прямо в письмо, зашить иконку в CSS или передать картинку в JSON — и для всего этого её надо превратить в Base64. Покажем четыре рабочих способа: от конвертера в один клик до трёх строк кода. И, главное, как вернуть строку обратно в нормальный файл.

Плотный цветной код на чёрном экране — кодирование картинки в Base64
Закодировать картинку в Base64 можно за секунды — нужен лишь правильный инструмент. Фото: Pexels

Когда это вообще нужно

Кодировать картинку в Base64 имеет смысл, когда изображение должно жить внутри текста, а не отдельным файлом. Типичные ситуации: иконка, вшитая в CSS, чтобы не делать лишний запрос; логотип в HTML-письме, который покажется даже при отключённых внешних картинках; маленькая аватарка, которую программы передают друг другу в виде текста (например, мобильное приложение отправляет её на сервер). Во всех этих случаях нужен не файл, а строка.

Принцип у всех способов одинаковый: на входе — байты картинки, на выходе — текст из 64 символов, который примерно на треть длиннее исходника. Меняется только инструмент: где-то это кнопка в браузере, где-то три строки кода. Поэтому сначала определитесь, где вам нужна строка — на странице, в скрипте или в API, — а способ подберётся сам.

Если же вы просто хотите уменьшить или сконвертировать фотографию для сайта — Base64 не ваш инструмент. Подробнее о том, где встроенные картинки уместны, а где вредят, мы пишем в статье «Base64-картинки в вебе».

Что такое Base64 за 10 секунд

Это способ записать байты картинки 64 безопасными символами (буквы, цифры, + и /). Картинка не меняется — меняется только её запись. Если хотите разобраться глубже, начните со статьи «Что такое Base64».

Способ 1: онлайн-конвертер (самый простой)

Если код вам не нужен — это лучший путь. Загружаете PNG, получаете готовую строку data URI и копируете её. Работает в любом браузере, в том числе на телефоне, и не требует установки.

1

Откройте конвертер

Перейдите на страницу PNG → Base64 и перетащите файл в область загрузки.

2

Скопируйте результат

Конвертер выдаст строку data:image/png;base64,… — нажмите «Копировать».

3

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

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

Закодируйте картинку в один клик

Загрузите PNG в конвертер FormatZ и получите готовую строку Base64 за пару секунд — прямо в браузере, без установки и регистрации.

Открыть конвертер PNG → Base64

Способ 2: JavaScript прямо в браузере

Когда картинку загружает пользователь, а закодировать её нужно на лету, в браузере есть встроенный инструмент — FileReader. Его метод readAsDataURL сразу возвращает готовую строку data URI, никаких библиотек не нужно.

const input = document.querySelector('input[type=file]');
input.addEventListener('change', () => {
  const reader = new FileReader();
  reader.onload = () => {
    console.log(reader.result);
    // → "data:image/png;base64,iVBORw0KGgo..."
  };
  reader.readAsDataURL(input.files[0]);
});

Для коротких текстов или уже готовых двоичных данных пригодятся встроенные функции btoa() (кодирование) и atob() (декодирование). Но для файлов FileReader удобнее: он сам формирует префикс data:…;base64,.

Цветной код Python с конструкцией try и except на экране
В Python кодирование и декодирование Base64 — это две строки из стандартного модуля. Фото: Pexels

Способ 3: Python и командная строка

Если изображение нужно обработать на сервере или в скрипте, проще всего взять стандартный модуль base64 в Python. Открываем файл в двоичном режиме (rb), кодируем и при желании добавляем префикс data URI:

import base64

with open("logo.png", "rb") as f:
    data = base64.b64encode(f.read()).decode()

uri = "data:image/png;base64," + data
print(uri)

Любителям терминала пригодится утилита base64 прямо из командной строки Linux и macOS: base64 logo.png > logo.txt закодирует файл, а флаг -d (base64 -d logo.txt > logo.png) раскодирует обратно. Быстро и без единой строчки кода.

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

{
  "user": "anna",
  "avatar": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}

На стороне сервера эта строка декодируется обратно в файл тем же base64.b64decode. Именно так аватарки и небольшие вложения часто путешествуют между фронтендом и бэкендом.

Цветной JavaScript-код крупным планом — встраивание Base64-строки в разметку
Готовую строку остаётся вставить в нужное место кода — в HTML или в CSS. Фото: Pexels

Способ 4: вставка в CSS и HTML

Получив строку, остаётся её правильно использовать. В HTML она идёт прямо в атрибут src, в CSS — внутрь url():

<!-- HTML -->
<img src="data:image/png;base64,iVBORw0KGgo..." alt="Логотип">

/* CSS */
.icon {
  background: url("data:image/svg+xml;base64,PHN2Zy...") no-repeat;
}

Обратите внимание: у SVG тип будет image/svg+xml, у JPG — image/jpeg. Если указать неверный тип, браузер может не отрисовать картинку. Вот шпаргалка по самым частым типам:

PNG
image/png
JPG / JPEG
image/jpeg
SVG
image/svg+xml
GIF
image/gif
WebP
image/webp
Префикс
data:<тип>;base64,

Подробно о применении в стилях и письмах — в статье «Base64 в CSS и email».

Главный секрет аккуратной строки — правильный тип данных в префиксе. Ошиблись с ним — и браузер просто не поймёт, что перед ним картинка.

Не для тяжёлых картинок

Помните про рост размера примерно на 33%. Кодировать в Base64 стоит мелкие иконки и логотипы; крупные фотографии лучше оставить отдельными файлами — так они кешируются и грузятся быстрее.

Как декодировать обратно

Обратное преобразование — это вернуть из строки нормальный файл. Самый простой путь снова онлайн: вставляете строку (с префиксом data: или без) в конвертер Base64 → PNG и скачиваете готовое изображение.

В коде на Python всё симметрично: base64.b64decode(строка) вернёт байты, которые записываются в файл в режиме wb. Главное — сначала отрезать префикс data:image/png;base64,, если он есть: декодеру нужны только сами данные.

4рабочих способа
~3строки кода в Python
0потерь качества

Частые ошибки

  • Забыли отрезать префикс. Декодер ждёт чистый Base64, а вы передали ему data:image/png;base64,… целиком — получаете «битый» файл. Уберите всё до запятой.
  • Неверный тип данных. Указали image/png для JPG-картинки — браузер откажется её рисовать. Этот тип (его называют MIME-тип) должен совпадать с реальным форматом.
  • Перенос строк. Некоторые инструменты разбивают длинную строку на несколько коротких (переносы строк). Для data URI такие переносы лучше убрать — иначе строка может не сработать в HTML.
  • Огромные файлы. Закодировали фотографию на 5 МБ — и страница раздулась. Для крупных изображений Base64 не нужен.

Хотите вернуть файл прямо сейчас? Воспользуйтесь конвертером Base64 → PNG, а полный список преобразований всегда есть на странице всех форматов.

Онлайн-конвертер. Вы загружаете PNG, а на выходе получаете готовую строку data URI, которую можно сразу скопировать в код. Ничего устанавливать не нужно, и работает на любом устройстве — включая телефон.
В браузере на JavaScript это делает FileReader через метод readAsDataURL — он сразу выдаёт строку data URI. В Python используйте модуль base64: откройте файл в режиме rb и вызовите base64.b64encode. Оба способа дают одинаковый результат.
Проще всего онлайн-конвертером Base64 в PNG: вставьте строку (с data URI или без) и скачайте готовый файл. В коде на Python это base64.b64decode, результат записывается в файл в режиме wb.
Да, если ваш инструмент ждёт чистый Base64. Префикс data:image/png;base64, — это часть data URI, а не самих данных. Хороший онлайн-конвертер обычно понимает оба варианта и сам отрезает префикс, но в коде его нужно убирать вручную.
Нет. Base64 не сжимает и не пересохраняет изображение — он лишь переписывает те же байты текстом. Пиксели до и после полностью идентичны, меняется только размер записи: строка примерно на треть длиннее файла.