Как перевести Base64 в PNG
- Вставьте Base64 или полный URI
data:image/png;base64,...в поле. Вместо этого можно открыть или перетащить файл.txtсо строкой. - Проверьте строку статуса: там должно быть Корректный Base64 и Определено: PNG. Превью показывает изображение и его размер в пикселях.
- При необходимости поменяйте Имя файла. В поле Расширение уже стоит
png. - Нажмите Скачать файл.
Если окажется, что данные в другом формате, над превью появится подсказка, например «Похоже на JPEG, а не на PNG», с кнопкой Скачать как .jpg. Обычно лучше сохранить файл с настоящим расширением, потому что переименование ничего не конвертирует.
Откуда берётся PNG в Base64
PNG – формат по умолчанию у многих инструментов, которые отдают картинки текстом:
canvas.toDataURL()в браузерах возвращает data URI с PNG, если не запросить другой тип. На нём построены поля для подписи, приложения для рисования и библиотеки графиков, которые экспортируют изображения.- Автоматизация браузера.
get_screenshot_as_base64()в Selenium иpage.screenshot({ encoding: "base64" })в Puppeteer возвращают скриншоты PNG чистым Base64, без префикса. Отчёты о тестах часто встраивают их в JSON или HTML. - API для QR-кодов, штрихкодов, капчи, карт и генерации изображений обычно возвращают PNG в поле JSON.
- HTML и CSS со встроенными иконками, а также однофайловые экспорты отчётов и блокнотов.
Всё это вставляется как есть. Переносы строк, отсутствующий = в конце и URL-safe символы допускаются; строка статуса сообщит, если пришлось добавить дополнение.
Как читать заголовок PNG
PNG начинается с 8-байтовой сигнатуры, за которой идёт чанк IHDR с основными свойствами изображения. Нажмите Показать hex-дамп, чтобы их увидеть. Для изображения 120×40 с прозрачностью первые две строки такие:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 00 78 00 00 00 28 08 06 00 00 00 35 ea 3e |...x...(.....5.>|
| Смещение | Байты | Смысл |
|---|---|---|
0x00 | 89 50 4e 47 0d 0a 1a 0a | сигнатура PNG, iVBORw0KGgo в Base64 |
0x10 | 00 00 00 78 | ширина: 0x78 = 120 px |
0x14 | 00 00 00 28 | высота: 0x28 = 40 px |
0x18 | 08 | глубина: 8 бит на канал |
0x19 | 06 | тип цвета: 6 = RGBA |
Тип цвета говорит, что у вас за PNG: 00 – оттенки серого, 02 – RGB, 03 – палитра (индексированные цвета), 04 – оттенки серого с альфой, 06 – RGB с альфой. PNG с палитрой после оптимизатора часто намного меньше RGBA, и это пригодится, когда Base64 должен быть коротким.
Если размеры выглядят абсурдно, например ширина в несколько миллионов пикселей, байты после сигнатуры повреждены, и превью не сработает.
Как проверить PNG в коде
Те же поля заголовка можно прочитать в несколько строк на Python без всяких библиотек для изображений. Разделение по запятой позволяет работать и с чистым Base64, и с data URI:
import base64, struct
def png_info(b64: str) -> dict:
data = base64.b64decode(b64.split(",", 1)[-1])
if data[:8] != b"\x89PNG\r\n\x1a\n":
raise ValueError("not a PNG")
width, height, depth, color_type = struct.unpack(">IIBB", data[16:26])
return {"width": width, "height": height, "bit_depth": depth, "color_type": color_type}
Чтобы записать файл в Node.js, достаточно fs.writeFileSync("shot.png", Buffer.from(b64, "base64")). Декодер Base64 в Node пропускает переносы строк и принимает URL-safe символы. Подробности в статьях Base64 в Python и Base64 в Node.js.
Если PNG не декодируется или не показывается
- Ошибка «Недопустимый символ». В строке есть что-то кроме Base64: экранирование JSON вроде
\/, HTML-сущность или остаток строки лога. В ошибке указана позиция, а починка Base64 убирает типичных виновников. - Картинка нарисована частично или не видна. Строку обрезали. Полный PNG заканчивается чанком
IEND; если знаете размер исходного файла, сравните его с полем Размер. - «Не похоже на PNG». Байты вообще не начинаются с сигнатуры PNG. Так бывает с зашифрованными данными, другой кодировкой вроде hex или дважды закодированным Base64; в последнем случае появится кнопка Декодировать ещё раз.
- Превью работает, а другая программа файл не принимает. Сравните SHA-256, показанный здесь, с хешем файла, который получила программа. Если они совпадают, декодированный файл правильный, а проблема в программе.
Обратное преобразование делает PNG в Base64.
Вопросы и ответы
Как сохранить результат canvas toDataURL() файлом PNG?
Скопируйте всю строку, которую вернул canvas.toDataURL(), вставьте её в поле выше и нажмите Скачать файл. Префикс обработается сам, а файл сохранится как .png, потому что это формат toDataURL() по умолчанию.
Мой Base64 не начинается с iVBORw0KGgo. Это всё равно PNG?
Нет. Любой PNG, какого бы размера он ни был, начинается с этих символов. Если страница сообщает JPEG, WebP или другой формат, данные никогда не были PNG, и сохранение с расширением .png поменяет только имя. Используйте Скачать как, чтобы сохранить настоящий тип.
Как понять, что у PNG прозрачный фон?
Откройте Показать hex-дамп и прочитайте байт по смещению 0x19, в нём записан тип цвета. 06 (RGBA) и 04 (оттенки серого с альфой) содержат альфа-канал. Типы 02, 03 и 00 тоже могут иметь прозрачность через чанк tRNS.
Сохранится ли анимация у анимированного PNG?
Да. APNG – это PNG с дополнительными чанками кадров, а декодирование сохраняет каждый байт. Превью проигрывает анимацию в браузерах с поддержкой APNG, то есть во всех актуальных.