Перевод base64 в PNG: таблицы, формулы и онлайн-конвертер
- В 2026 году все современные браузеры полностью поддерживают Data URI до 2 МБ, для больших файлов используйте Blob с URL.createObjectURL.
- Строка base64 всегда кратна 4 символам; при неверной длине добавьте символы '=', иначе изображение не декодируется.
- Реальный протокол: декодирование base64 → ArrayBuffer → in-memory PNG → передача в canvas/загрузка — занимает 5-15 мс для картинки 1920×1080.
- Онлайн-конвертер Base64 в PNG выдаёт мгновенный результат без единой строчки кода — подходит для разовых задач.
- Что такое base64 и зачем переводить в PNG
- Формулы и правила: как декодировать base64 в PNG
- Рабочий пример: браузерный JavaScript (2026)
- Пример на Node.js (2026): fs + Buffer
- Таблица: формат строки base64 для разных случаев
- Частые ошибки и как их отловить
- Онлайн-конвертер: быстрый способ без кода
- Сравнение методов: Blob vs Data URI vs онлайн
Что такое base64 и зачем переводить в PNG
Base64 — это способ кодирования бинарных данных (например, PNG-картинки) в текст из 64 символов (A-Z, a-z, 0-9, +, /). Используется, когда нужно передать изображение через текстовый протокол (JSON, HTML, email). PNG — формат сжатия без потерь, поддерживает прозрачность. Преобразование нужно, чтобы:
- отобразить картинку на веб-странице без отдельного файла;
- скачать её на устройство;
- обработать в canvas (поворот, ресайз).
Формулы и правила: как декодировать base64 в PNG
В основе лежит обратное преобразование: каждый символ текста base64 даёт 6 бит, которые собираются в байты PNG-файла.
Важно: PNG требует правильного заголовка (сигнатура 0x89 0x50 0x4E 0x47). Если после декодирования файл не открывается — проверьте, что входная строка — целое изображение, без HTML-обёртки.
Рабочий пример: браузерный JavaScript (2026)
Пример преобразует base64-строку в PNG и показывает в , а также позволяет скачать.
function base64ToPNG(base64, filename = 'image.png') {
const byteChars = atob(base64);
const byteNums = new Array(byteChars.length);
for (let i = 0; i < byteChars.length; i++) {
byteNums[i] = byteChars.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNums);
const blob = new Blob([byteArray], { type: 'image/png' });
const url = URL.createObjectURL(blob);
// показать в img
const img = document.getElementById('output');
img.src = url;
// скачать
const a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
// освободить память
URL.revokeObjectURL(url);
}Пример на Node.js (2026): fs + Buffer
Серверный код на Node.js получает base64 из API и сохраняет PNG на диск.
const fs = require('fs');
function saveBase64AsPNG(base64String, outputPath) {
// Удаляем заголовок data:image/png;base64, если есть
const cleaned = base64String.replace(/^data:image\/\w+;base64,/, '');
const buffer = Buffer.from(cleaned, 'base64');
fs.writeFileSync(outputPath, buffer);
console.log('PNG saved:', outputPath);
}
// Пример использования
saveBase64AsPNG('iVBORw0KGgoAAAANSUhEUg...', 'output.png');Подводный камень: не забудьте удалить префикс data:image/png;base64, если он есть — иначе Buffer.from выдаст мусор.- 1Получить строку base64
Из JSON, input или Data URI.
- 2Удалить префикс (если есть)
Регулярка /^data:image\/\w+;base64,/
- 3Декодировать в байты
atob() в браузере, Buffer.from() в Node.
- 4Создать Blob с типом image/png
new Blob([uint8Array], {type:'image/png'})
- 5Показать или скачать
URL.createObjectURL() для img.src или download.
Таблица: формат строки base64 для разных случаев
| Источник | Пример строки | Что удалить | Примечание |
|---|---|---|---|
| HTML src (Data URI) | data:image/png;base64,iVBOR... | data:image/png;base64, | в браузере можно сразу вставить в src |
| JSON от API | "image": "iVBOR..." | ничего | чистая base64 без префикса |
| Canvas toDataURL | data:image/png;base64,iVBOR... | data:image/png;base64, | стандартный формат canvas |
✅ Чек-лист: корректный перевод base64 в PNG
0 из 8
Частые ошибки и как их отловить
- Неверная длина строки: base64 без паддинга — добавьте '=' до кратности 4. Используйте
base64.padEnd(Math.ceil(base64.length/4)*4, '='). - Битый PNG: проверьте первые 4 байта декодированного бинарника — должны быть 0x89 0x50 0x4E 0x47. Если нет — вход не PNG.
- Огромные строки ( >2 МБ): в браузере atob может выдать ошибку. Используйте
fetch('data:image/png;base64,' + bigString).then(r => r.blob()). - Пробелы в строке: обрежьте
.trim()и удалите символы новой строки.replace(/\s/g, '').
Онлайн-конвертер: быстрый способ без кода
Если нужно единоразово перевести base64 в PNG — проще использовать готовый инструмент. Наш Конвертер Base64 в PNG за секунду превращает строку в готовое для скачивания изображение. Также пригодятся Конвертер PNG в Base64 для обратной задачи, Конвертер JPG в Base64 и Base64 в PDF для других форматов.
Сравнение методов: Blob vs Data URI vs онлайн
| Метод | Производительность | Макс. размер | Когда использовать |
|---|---|---|---|
| Data URI в img src | быстро до ~2 МБ | ~5 МБ (браузер) | небольшие иконки, инлайн |
| Blob + createObjectURL | очень быстро | до 1 ГБ | большие файлы, загрузка |
| Онлайн-конвертер | мгновенно | обычно до 50 МБ | разовые операции, без кода |
🧮 Посчитайте сами — инструменты по теме
🧭 Разделы по теме
Частые вопросы
Что такое base64 и зачем его переводят в PNG?
Base64 — текстовое представление бинарных данных. Перевод в PNG нужен, чтобы отобразить картинку на сайте, скачать её или обработать графически.
Как проверить, что строка base64 — это именно PNG?
Декодируйте первые 4 байта: PNG-файл всегда начинается с сигнатуры 89 50 4E 47 0D 0A 1A 0A (первые 8 байт). Можно также проверить content-type, если строка получена с сервера.
Что делать, если после декодирования PNG не открывается?
Проверьте три вещи: не забыли ли удалить префикс data:..., нет ли лишних пробелов/переносов, и правильная ли длина строки (кратна 4). Используйте hex-редактор для проверки первых байт.
Почему atob() выдаёт ошибку для больших строк?
atob() в некоторых браузерах ограничен размером (обычно ~2 MB). Для больших строк используйте fetch с Data URI или разбейте на части.
Как преобразовать base64 в PNG в Node.js?
Используйте Buffer.from(base64String, 'base64') и запишите результат в файл с fs.writeFileSync. Предварительно удалите data:... префикс, если он есть.
Есть ли разница между декодированием в браузере и на сервере?
В браузере метод atob() возвращает строку, которую нужно превратить в Uint8Array. На сервере Node.js Buffer.from работает напрямую. В остальном результат одинаков.
Как использовать онлайн-конвертер base64 в PNG?
Вставьте строку base64 в поле ввода (с префиксом или без) и нажмите 'Конвертировать'. Через секунду получите готовый PNG для скачивания.
Можно ли преобразовать base64 другого формата (JPG, GIF) в PNG?
Нет, декодирование base64 даёт исходный бинарник. Если исходник был JPG, то и после декодирования будет JPG. Чтобы конвертировать в PNG, нужно дополнительное декодирование/кодирование изображения.
Источники и нормативные документы
- MDN: Base64 encoding and decoding
- W3C: Data URIs
- Спецификация PNG (RFC 2083)