Как пользоваться
- Перетащите файл .bmp в область загрузки, нажмите на неё, чтобы выбрать файл, или вставьте изображение.
- Выберите PNG в списке «Преобразовать в», чтобы получить результат без потерь и гораздо меньшего размера, или оставьте «Исходный формат», если принимающая система требует BMP.
- Сравните исходный размер с размером после кодирования, чтобы увидеть экономию.
- Скопируйте или скачайте результат в виде data URI, чистого Base64, тега img, правила CSS или изображения Markdown.
Что такое файл BMP?
BMP — формат аппаратно-независимых точечных рисунков Windows. Он хранит пиксели построчно, почти всегда без сжатия (для 4-битных и 8-битных изображений существует простой режим кодирования длин серий). Тип MIME — image/bmp, хотя некоторые системы сообщают image/x-ms-bmp, а результат Base64 начинается с Qk — это закодированные буквы BM.
Без сжатия размер файла напрямую зависит от размеров изображения. 24-битное изображение 800 на 600 пикселей занимает около 1,4 МБ, а его Base64 — почти 1,9 МБ текста.
Преобразуйте в PNG перед кодированием
PNG тоже хранит изображение без потерь, поэтому типичный 24-битный точечный рисунок после преобразования в PNG сохраняет пиксели в точности, а файл уменьшается — часто в несколько раз, а для скриншотов и плоской графики ещё сильнее. Для фотографий, сохранённых в BMP, JPEG или WebP с хорошим качеством дадут ещё более короткую строку. Исходный размер и размер после кодирования, показанные для каждого изображения, наглядно демонстрируют разницу.
Когда стоит оставить исходный BMP
Некоторые получатели ожидают настоящий точечный рисунок: старые программы для Windows, принтеры этикеток и чеков, небольшие дисплеи под управлением микроконтроллеров или тестовые данные, которые должны побайтно совпадать с файлом. В таких случаях не включайте преобразование; тогда результат Base64 будет точной копией файла. Все основные браузеры умеют показывать изображения data:image/bmp, но для веб-страниц и электронной почты лучше подходит PNG.
То же преобразование в скрипте на Python с библиотекой Pillow:
from PIL import Image
import base64, io
buf = io.BytesIO()
Image.open('scan.bmp').save(buf, 'PNG')
uri = 'data:image/png;base64,' + base64.b64encode(buf.getvalue()).decode()
Часто задаваемые вопросы
Почему строка Base64 для BMP такая длинная?
BMP хранит каждый пиксель без сжатия, а Base64 добавляет сверху ещё треть. Предварительное преобразование в PNG обычно резко сокращает строку без потери деталей.
Теряется ли качество при преобразовании BMP в PNG?
Нет. PNG — формат без потерь, поэтому пиксели остаются прежними. Меняется только способ их хранения.
Могут ли браузеры показывать data:image/bmp URI?
Да, Chrome, Edge, Firefox и Safari отображают BMP. Почтовые клиенты и многие онлайн-платформы работают с ним менее надёжно, поэтому там безопаснее использовать PNG.
Поддерживает ли BMP прозрачность?
32-битный BMP может хранить альфа-канал, но программы и браузеры обрабатывают его по-разному. Если нужна прозрачность, преобразуйте изображение в PNG или WebP.