Сравнение

PPM против PNG и BMP: размер, сжатие и кто кого

На первый взгляд PPM, PNG и BMP делают одно и то же — хранят растровую картинку из пикселей. Но за этой похожестью прячутся три разные философии. Один думает только о простоте, второй — об экономии места, третий — о совместимости с Windows. Разберём по полочкам, у кого больше вес, у кого есть прозрачность и какой формат выбрать под вашу задачу.

Код с описанием связей данных — три формата хранят пиксели по-разному
Три формата, три подхода к одному и тому же: как хранить пиксели. Фото: Pexels

Знакомимся: трое героев

Прежде чем сравнивать, познакомимся с участниками. Все три — растровые форматы (картинка из пикселей), но выросли из разных миров.

  • PPM (Portable Pixmap) — формат из семейства Netpbm, рождённый в мире Unix. Максимально простой: текстовый заголовок плюс сырые пиксели, никакого сжатия. Если хотите узнать его подробнее — есть статья «Что такое PPM».
  • BMP (Bitmap) — родной растровый формат Windows. Тоже хранит пиксели почти без сжатия, но с бинарным заголовком в стиле Microsoft.
  • PNG (Portable Network Graphics) — современный веб-формат. Главная фишка — сжатие без потерь и поддержка прозрачности.

Сжатие: главное различие

Если запомнить из этой статьи только одну вещь, пусть это будет вот что: PPM и BMP не сжимают картинку, а PNG — сжимает. Это и есть водораздел.

PPM и BMP хранят каждый пиксель «как есть», байт за байтом. Просто и быстро, но файл получается огромным. PNG же применяет умное сжатие без потерь: он находит повторы и закономерности в пикселях и упаковывает их компактнее. При этом ни один пиксель не теряется — распаковав PNG, вы получаете ровно ту же картинку. Это отличает его от JPG, который ради малого веса жертвует деталями.

Без потерь ≠ без сжатия

Частая путаница. «Без потерь» означает, что качество не страдает. «Без сжатия» — что файл не ужимается вообще. PNG — без потерь, НО со сжатием (лучшее из двух миров для графики). PPM и BMP — без потерь И без сжатия (поэтому тяжёлые).

Редактор кода с подсветкой — сжатие PNG это умный алгоритм поверх тех же пикселей
PNG добавляет к тем же пикселям умный слой сжатия — отсюда и разница в весе. Фото: Pexels

Сравнительная таблица

СвойствоPPMPNGBMP
Сжатие без потерьНетДаНет*
Прозрачность (альфа)НетДаЧастично
Типичный весБольшойМалыйБольшой
Поддержка в браузерахНетДаНет
Простота парсингаОченьСредняяСредняя
Заголовок читается глазамиДа (P3)НетНет

* BMP формально поддерживает RLE-сжатие, но на практике почти всегда хранится несжатым.

Размер на конкретном примере

Цифры нагляднее слов. Возьмём обычную фотографию 4000×3000 пикселей (12 мегапикселей) и посмотрим, сколько примерно займёт каждый формат:

~36 МБPPM (несжатый)
~36 МБBMP (несжатый)
~10–15 МБPNG (без потерь)

Разница очевидна: PNG при том же качестве легче в 2–3 раза. А если бы мы взяли JPG (с потерями), он ужался бы до 2–4 МБ — но это уже другая лига, со своими компромиссами по качеству. Вывод простой: для хранения и пересылки несжатые PPM и BMP проигрывают вчистую.

Когда «тяжёлый» — это плюс

Несжатость PPM и BMP — не всегда минус. Если программе нужно быстро прочитать пиксели без распаковки, отсутствие сжатия экономит время процессора. Поэтому в обработке изображений PPM ценят именно за «сырость».

PPM против BMP: близнецы, но не братья

PPM и BMP похожи: оба несжатые, оба хранят пиксели напрямую. Но это два разных диалекта одной идеи, выросшие в разных экосистемах.

BMP — это Windows. Бинарный заголовок, поддержка цветовых палитр, привязка к экосистеме Microsoft. PPM — это Unix и программисты. Текстовый, кросс-платформенный заголовок, предельная простота: разобрать PPM в любом языке программирования можно за десяток строк, и именно за это его любят в пайплайнах. Подробнее об этом — в статье «Почему PPM любят в программировании».

Грубо говоря: BMP делали, чтобы картинку понял Windows, а PPM — чтобы её понял любой код. Оба сегодня уступают PNG по практичности, но PPM остаётся живым именно в технической нише.

Экран с кодом обработки данных — PPM удобен коду, PNG удобен людям
PPM говорит на языке кода, PNG — на языке браузеров и людей. Фото: Pexels

Ещё одно отличие, важное на практике, — скорость доступа к пикселям. Чтобы достать конкретный пиксель из PNG, программе нужно сначала распаковать сжатые данные. В PPM и BMP пиксели лежат подряд и без обработки, поэтому случайный доступ к ним мгновенный. Для отображения в браузере это неважно, а вот для алгоритмов обработки изображений может быть решающим — поэтому несжатые форматы и держатся в технической нише.

Что выбрать под задачу

Выложить в интернет
PNG
Нужна прозрачность
PNG
Промежуточный шаг в коде
PPM
Совместимость со старым ПО Windows
BMP
Минимальный вес фото
JPG
Хранить и пересылать
PNG

Вывод прост: в 9 случаях из 10 побеждает PNG — он лёгкий, с прозрачностью и открывается везде. PPM держится в нише программирования и обработки, а BMP — в наследии Windows. Поэтому, если у вас на руках PPM или BMP и нужно что-то с ними сделать в обычной жизни, логичный шаг — конвертировать их в PNG.

Превратите тяжёлый PPM в лёгкий PNG

Конвертер FormatZ ужмёт несжатый PPM до компактного PNG без потери качества — за пару секунд и прямо в браузере.

Конвертировать PPM в PNG

Нужна обратная операция — получить из картинки «сырые» пиксели? Есть конвертер PNG → PPM. А выбрать любое другое преобразование можно на странице всех форматов.

PPM, PNG и BMP — не конкуренты, а специалисты. PNG для людей и веба, PPM для кода, BMP для наследия Windows. Вопрос не «кто лучше», а «что вам нужно сейчас».
PPM и BMP примерно равны и оба тяжёлые, потому что не используют сжатие — хранят каждый пиксель целиком. PNG сжимает без потерь и обычно весит в несколько раз меньше при том же качестве. Так что для хранения и пересылки PNG почти всегда выигрывает.
Оба несжатые, но PPM из мира Unix и программистов: его заголовок текстовый, формат предельно простой и его легко разобрать в любом коде. BMP — формат Windows с бинарным заголовком и палитрами. По сути это два разных диалекта одной идеи «хранить сырые пиксели».
Только у PNG есть полноценный альфа-канал (прозрачность). Классический PPM прозрачности не поддерживает вообще, а в BMP она есть лишь частично и работает нестабильно. Если нужны прозрачные участки — выбор однозначно PNG.
Когда нужен максимально простой формат для кода: промежуточный шаг в пайплайне обработки изображений, вывод картинки из своей программы, учебные задачи. Для всего остального — показать, переслать, выложить в сеть — лучше PNG или JPG.
Самый простой способ — конвертировать PPM в PNG. Это сжатие без потерь: качество остаётся прежним, а вес падает в разы. Сделать это можно онлайн в конвертере FormatZ за пару секунд, без установки программ.