Перевод base64 в изображение: таблицы, формулы и онлайн-конвертер

💻 IT и кодОбновлено: 11 июля 2026 г.4 мин чтения
Перевод base64 в изображение — рутина для фронтендера и бэкендера. Но баги с padding, мусорные data:URI или потеря качества на сервере отнимают часы. Разбираем все edge cases, даю рабочие таблицы и готовый конвертер, чтобы вы не писали велосипед.
⚡ Коротко: главное
  • Base64-изображение занимает на 33% больше места, чем бинарное.
  • Корректный MIME-тип (image/png, image/jpeg и т.д.) обязателен для data:URI.
  • Функция atob() в JS не работает с Unicode; используйте Uint8Array.
  • В Python лишний перевод строки в base64 ломает декодирование; применяйте base64.b64decode(strict=True).

Формат data:URI — как распарсить

Изображение в base64 передается как data:URI:

data:[<mime>][;base64],<data>

Пример: data:image/png;base64,iVBORw0KGgoAAA.... Чтобы получить бинарные данные, нужно:

  • Отделить префикс до запятой.
  • Извлечь MIME-тип (всё между : и ;).
  • Декодировать строку base64 после запятой.

Таблица MIME-типов для популярных форматов:

ФорматMIME-типРасширение
PNGimage/png.png
JPEGimage/jpeg.jpg
GIFimage/gif.gif
WebPimage/webp.webp
SVGimage/svg+xml.svg

Если MIME-тип неверен — браузер не отобразит картинку, а сервер может сохранить битый файл.

Браузерный JavaScript — atob() vs Uint8Array

Наивное решение через atob() и присвоение blob ломается на кириллице и при больших размерах. Вот рабочий код:

function base64ToBlob(base64, mime = 'image/png') {
  const byteChars = atob(base64.split(',')[1] || base64);
  const byteNumbers = new Array(byteChars.length);
  for (let i = 0; i < byteChars.length; i++) {
    byteNumbers[i] = byteChars.charCodeAt(i);
  }
  const byteArray = new Uint8Array(byteNumbers);
  return new Blob([byteArray], {type: mime});
}

Создание ссылки для скачивания:

const blob = base64ToBlob('iVBOR...', 'image/png');
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'image.png';
a.click();
URL.revokeObjectURL(url);

Edge-case: некоторые base64-строки содержат переводы строк (Base64 с MIME). Удалите их: base64.replace(/\s/g, '').

Node.js — Buffer.from без украшательств

В Node.js декодирование одной строкой:

const base64 = 'iVBOR...';
const buffer = Buffer.from(base64, 'base64');
fs.writeFileSync('image.png', buffer);

Если base64 содержит data:image/png;base64,, отрежьте префикс:

const prefix = 'data:image/png;base64,';
const raw = base64.startsWith(prefix) ? base64.slice(prefix.length) : base64;
const buffer = Buffer.from(raw, 'base64');

Подводный камень: Buffer.from игнорирует некорректные символы в base64. Валидируйте через base64-js или проверяйте регуляркой /^[A-Za-z0-9+/]+={0,2}$/.

Base64 → Изображение: пошаговый процесс
  1. 1
    1. Выделите data: часть

    Уберите префикс до запятой (data:image/png;base64,).

  2. 2
    2. Отбросьте MIME-тип

    Извлеките MIME-тип между 'data:' и ';base64'.

  3. 3
    3. Декодируйте base64

    Используйте atob (JS), Buffer.from (Node) или b64decode (Python).

  4. 4
    4. Сохраните как бинарный файл

    Создайте Blob (браузер) или запишите буфер (Node/Python).

Четыре шага от data:URI до файла.

Python — b64decode и ошибка с padding

Python требует правильного padding (знак =). Если строка не кратна 4, добавьте символы:

import base64

raw = 'iVBOR...'
# Дополняем padding
missing_padding = len(raw) % 4
if missing_padding:
    raw += '=' * (4 - missing_padding)

data = base64.b64decode(raw)
with open('image.png', 'wb') as f:
    f.write(data)

В Python 3.10+ можно использовать base64.b64decode(raw, validate=True), чтобы ловить ошибки. Таблица частых ошибок:

СимптомПричинаРешение
TypeError: Incorrect paddingДлина строки не кратна 4Добавить '='
binascii.Error: Non-base64 digitЛишний символ (например, пробел)Удалить все пробелы и переводы строк
Файл не открываетсяНеверный MIME-типПроверить сигнатуру файла (первые байты)

Чеклист: безошибочный перевод base64 в изображение

0 из 8

Онлайн-конвертер base64 → изображение

Чтобы не писать код каждый раз, используйте готовый инструмент: Конвертер Base64 в изображение. Он:

  • Принимает как data:URI, так и чистую base64.
  • Автоматически определяет MIME-тип.
  • Позволяет скачать готовый файл.

Если ваша задача — обратное преобразование (картинка → base64), подойдет Конвертер JPG в Base64. Для работы с PDF есть Base64 в PDF и PDF в Base64.

Edge-cases: SVG, прозрачность, большие файлы

  • SVG — base64 для SVG содержит MIME image/svg+xml. При декодировании получится текст XML. Убедитесь, что не потеряли кодировку UTF-8.
  • Прозрачность — PNG с альфа-каналом не теряется при base64. Но JPEG не поддерживает прозрачность; если base64 начинается на /9j/ (JPEG), прозрачности нет.
  • Большие файлы — строка base64 в 1.5 раза длиннее оригинала. Для файлов > 50 МБ используйте потоковое декодирование (например, Blob.stream() в браузере).

Подсказка: проверьте первые байты декодированного файла — сигнатуру. Для PNG это 89 50 4E 47 0D 0A 1A 0A, для JPEG — FF D8 FF.

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

«Base64 неправильно преобразовался — картинка битая» — первым делом проверьте MIME-тип и padding.

Чеклист отладки:

  1. Проверьте, что строка base64 начинается с правильного префикса data:URI или без него.
  2. Убедитесь, что длина строки кратна 4 (добавьте '=' если нет).
  3. Удалите все пробелы и переводы строк: str.replace(/\s/g, '').
  4. Принудительно задайте MIME-тип на основе сигнатуры, если заголовок потерян.
  5. В браузере используйте console.log(new Blob([...]).size) для проверки размера Blob.

🧮 Посчитайте сами — инструменты по теме

🧭 Разделы по теме

Частые вопросы

Как преобразовать base64 обратно в изображение онлайн?

Используйте наш Конвертер Base64 в изображение: вставьте строку base64 (с префиксом data: или без), и он автоматически декодирует её в файл. Также можно скачать результат в выбранном формате.

Почему мой base64 превращается в битое изображение?

Обычно причина в неправильном MIME-типе, отсутствии padding или мусорных символах. Убедитесь, что строка начинается с правильного префикса (например, data:image/png;base64,) и не содержит пробелов. Если MIME-тип не указан, попробуйте угадать по первым байтам.

Как получить base64 из изображения?

В браузере используйте FileReader.readAsDataURL, в Node — fs.readFileSync в паре с Buffer.toString('base64'). Также можно загрузить картинку в онлайн-конвертер, например Конвертер JPG в Base64.

Чем отличается data:URI от обычного base64?

data:URI включает MIME-тип и префикс data:...;base64,, например data:image/png;base64,iVBOR.... Обычный base64 — это только сама строка без префикса. Оба варианта корректны, но data:URI используется в HTML/URL, а чистый — при передаче через JSON.

Base64 и кодировка UTF-8 — есть ли проблемы?

Стандартный base64 оперирует байтами, поэтому не зависит от кодировки. Но если ваша строка содержит символы Unicode (например, в SVG как тексте), убедитесь, что при декодировании не теряется кодировка. Используйте Uint8Array (JS) или декодируйте как raw bytes.

Какой максимальный размер файла можно преобразовать через base64?

Теоретически ограничений нет, но на практике большие строки base64 (например, > 100 МБ) вызывают проблемы с памятью в браузерах. Для таких файлов лучше передавать бинарные данные напрямую, а не через base64. В Node.js ограничение только по памяти процесса.

Что делать, если при декодировании возникает ошибка 'Incorrect padding'?

Добавьте недостающие символы '=' так, чтобы длина строки стала кратной 4. В Python: raw + '=' * (4 - len(raw) % 4). В JS: str += '='.repeat((4 - str.length % 4) % 4).

Источники и нормативные документы

  1. MDN Web Docs: Data URLs
  2. Python base64 documentation
  3. Node.js Buffer documentation
  4. Base64 Wikipedia (сигнатуры файлов)

Ещё по теме «IT и код»