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

💻 IT и кодОбновлено: 11 июля 2026 г.4 мин чтения
Зачем кодировать картинку в Base64? — чтобы встроить её прямо в HTML/CSS, отправить в JSON или сохранить в БД без файлового хранилища. Но без правильной формулы можно схлопотать 33% накладных расходов. Разбираем, как считать размер и конвертировать без боли.
⚡ Коротко: главное
  • Base64 увеличивает размер данных на 33% по сравнению с исходным бинарным файлом.
  • Онлайн-конвертер изображения в Base64 за пару секунд выдаёт готовую строку для вставки в с data:URI.
  • Для оптимизации: сжатие JPEG до 50% качества перед кодированием снижает итоговый размер до 70%.
  • Встроенная функция btoa() в браузере работает только с латиницей — для кириллицы нужно до- или после- преобразование.
  • Использование data:URI замедляет первый рендеринг страницы на 15-30 мс на каждые 100 КБ встроенных данных.

Что такое Base64 и зачем переводить изображение

Base64 — это способ упаковать бинарные данные (картинку, PDF) в строку, пригодную для передачи через текстовые протоколы: HTTP, JSON, XML. В вебе это чаще всего нужно, чтобы:

  • Встроить изображение прямо в HTML/CSS без лишнего HTTP-запроса (data:URI);
  • Отправить файл в JSON-теле POST-запроса;
  • Спрятать изображение внутри SQL-базы или NoSQL-документа.

Но плата за удобство — ~33% дополнительного размера. Например, файл 1 МБ станет ~1,4 МБ Base64-строки.

Формула расчёта размера Base64-строки

Точный размер можно вычислить заранее, чтобы не удивляться. Математика простая:

Размер Base64 (байт) = ceil(исходный_размер / 3) × 4

Почему? Каждые 3 байта (24 бита) кодируются 4 символами Base64 (6 бит на символ). Если остаток 1 или 2 байта — добавляются padding-символы '='.

Пример: файл 1000 байт. ceil(1000/3) = 334 блока. Итого: 334×4 = 1336 символов. Из них 2 символа '=' (если 1000 mod 3 = 1, то 2 padding). Строка длиной 1336 символов занимает 1336 байт (если UTF-8). Плюс накладные расходы data:URI (~30 символов).

Как перевести изображение в Base64: способы

Есть три основных пути. Выбирайте по ситуации:

  • Онлайн-конвертер: самый быстрый — заходите на Конвертер изображения в Base64, перетаскиваете файл и копируете готовую строку с data:URI. Идеально для разовой вставки в вёрстку.
  • В браузере (JavaScript): FileReader + btoa. Удобно для клиентских скриптов. Код ниже.
  • На сервере (Node.js, Python): для автоматизации. Пример для Node.js — читаем файл и кодируем.

Обратная операция — конвертация Base64 в исходный формат: для PDF используйте Base64 в PDF, для изображений — соответствующие декодеры.

Пример кода: конвертация изображения в Base64 на JavaScript (браузер)

function imageToBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => {
      resolve(reader.result); // полная data:URI строка
    };
    reader.onerror = reject;
    reader.readAsDataURL(file);
  });
}

// Использование:
const input = document.getElementById('file-input');
input.addEventListener('change', async (e) => {
  const file = e.target.files[0];
  const base64 = await imageToBase64(file);
  console.log(base64);
});

Этот код работает в любом современном браузере. Результат — data:image/png;base64,iVBOR... — готов для вставки в src тега .

Процесс конвертации изображения в Base64
  1. 1
    Выбор изображения

    Определитесь с форматом (JPEG, PNG) и размером.

  2. 2
    Открытие конвертера

    Зайдите на онлайн-сервис или подготовьте скрипт.

  3. 3
    Загрузка файла

    Перетащите или выберите файл через диалог.

  4. 4
    Кодирование

    Алгоритм сам преобразует бинарные данные в текст.

  5. 5
    Копирование строки

    Полученная data:URI содержит полную информацию.

  6. 6
    Вставка в проект

    Вставьте в src тега или в JSON.

Загрузка → кодирование → использование

Пример кода: конвертация изображения в Base64 на Node.js

Для серверной обработки:

const fs = require('fs');
const path = 'photo.jpg';
const bitmap = fs.readFileSync(path);
const base64 = Buffer.from(bitmap).toString('base64');
// Добавляем data:URI вручную
const ext = path.split('.').pop();
const mime = `image/${ext}`;
const dataUri = `data:${mime};base64,${base64}`;
fs.writeFileSync('output.txt', dataUri);

Обратите внимание: на сервере лучше не хранить Base64 как строку в памяти для больших файлов — используйте потоки.

🧠 Проверьте знание Base64

1. На сколько процентов увеличивается размер файла после кодирования в Base64?

2. Какая встроенная функция браузера кодирует строку в Base64?

3. Какой заголовок data:URI для файла image.png?

4. Для каких изображений не рекомендуется использовать Base64?

5. Что такое padding в Base64?

Частные случаи: JPG, PNG, SVG и PDF

ФорматMIME-типСредний коэффициент сжатия (относительно BMP)Рекомендуемый конвертер
JPGimage/jpeg10:1Конвертер JPG в Base64
PNGimage/png5:1Конвертер изображения в Base64
SVGimage/svg+xml— (текстовый)Тот же конвертер, но можно просто вставить в HTML
PDFapplication/pdfPDF в Base64

Если нужно собрать несколько изображений в один документ — используйте Изображения в PDF.

Подводные камни: раздувание трафика, кэширование, безопасность

Не встраивайте большие изображения (> 100 КБ) в Base64 — это увеличит размер страницы и замедлит начальную загрузку.

Основные проблемы:

  • Размер: 33% оверхеда — для больших файлов лучше грузить отдельно;
  • Кэширование: data:URI не кэшируется браузером отдельно, только как часть документа. Изменение картинки приводит к повторной загрузке всего HTML/CSS;
  • Безопасность: не кодируйте пользовательские файлы в Base64 на сервере без проверки типа — злоумышленник может загрузить shell-скрипт, замаскированный под картинку;
  • Кириллица в data:URI: если имя файла содержит русские буквы, убедитесь, что сервер возвращает правильный charset.

Как отладить: проверка синтаксиса data:URI

Если картинка не отображается — скорее всего, проблема в MIME-типе или синтаксисе. Проверьте вручную:

  1. Откройте строку data:URI в новой вкладке браузера;
  2. убедитесь, что после data: стоит правильный MIME (например, image/png);
  3. проверьте, что после ;base64, нет лишних пробелов;
  4. декодируйте Base64 онлайн и посмотрите, получился ли валидный файл (например, header PNG — 137 80 78 71).

Для отладки в JavaScript используйте fetch(dataUri) и проверьте response.status и response.blob(). Если статус 200, значит синтаксис верен.

Итог: когда Base64 — это хорошо, а когда — зло

Base64 для изображений — отличный инструмент, но только в правильных сценариях:

  • Используйте: для иконок, логотипов, мелких SVG (до 10-20 КБ) — это сокращает количество HTTP-запросов;
  • Избегайте: для больших фотографий, которые могут меняться — грузите их отдельно и кешируйте;
  • Автоматизируйте: для пакетной конвертации пишите скрипты или используйте онлайн-инструменты.

И помните: главный враг — оверхед 33%. Жертвуйте иногда одним HTTP-запросом, чтобы не таскать 100 КБ Base64

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

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

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

Зачем переводить картинку в Base64?

Чтобы встроить изображение напрямую в HTML, CSS, JSON или XML без отдельного файла. Это уменьшает количество HTTP-запросов, но увеличивает размер данных.

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

Используйте сервисы вроде «Конвертер изображения в Base64»: загрузите файл, скопируйте готовую строку data:URI. Никакой установки.

Какова формула размера Base64?

Размер в байтах = ceil(исходный_размер_в_байтах / 3) * 4. Например, для файла 1 КБ (1024 байт) будет ceil(1024/3)*4 = 342*4 = 1368 байт.

Можно ли конвертировать Base64 обратно в PDF?

Да, если у вас есть строка Base64, представляющая PDF-файл, используйте «Base64 в PDF» на том же сайте: вставьте строку и скачайте PDF.

Как перевести JPG в Base64?

В онлайн-конвертере выберите файл с расширением .jpg или .jpeg, и он вернёт строку с MIME-типом image/jpeg. Аналогично для PNG и других форматов.

Почему data:URI не грузится в браузере?

Возможно, неверный MIME-тип или пробелы. Откройте строку в новой вкладке — если не показывает, скопируйте только data:URI без лишних символов.

Как уменьшить размер Base64-строки?

Перед кодированием сожмите изображение: уменьшите разрешение (например, до 800×600) и качество JPEG до 80%. Для PNG переведите в 8-битный цвет.

Можно ли закодировать SVG в Base64?

Да, но для SVG чаще выгоднее вставлять код напрямую в HTML, потому что Base64 увеличивает его объём на 33% без выгоды.

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

  1. MDN — Base64 encoding and decoding
  2. W3C — Data URIs

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