Растровые форматы
Play ITЗагрузка интерактивного демо…
Play ITЗагрузка интерактивного демо…
Play ITЗагрузка интерактивного демо…
Растровые форматы
Растровое изображение — это прямоугольная сетка из мельчайших элементов, называемых пикселями. Каждый пиксель содержит информацию о цвете (обычно в системе RGB — красный, зелёный, синий) и, при наличии, о прозрачности (альфа-канал). Чем выше разрешение (ширина × высота в пикселях), тем детальнее изображение — но и тем больше объём данных. Растровые форматы различаются способом кодирования этих данных — с потерями или без, с поддержкой анимации или слоёв, с оптимизацией под печать, веб или 3D-рендеринг.
Для экранов и браузеров ориентируйтесь на sRGB. Альфа-канал задаёт прозрачность (0 — полностью прозрачный, 255 — непрозрачный в 8-битном канале).
Подробнее о выборе растр/вектор и srcset — в статье Вектор и растр.
| Задача | Формат |
|---|---|
| Фото для сайта | WebP или AVIF (lossy), JPEG как запасной |
| Скриншот, UI, текст на картинке | PNG |
| Простая анимация | GIF, WebP/APNG или короткое MP4 |
| Печать / архив | TIFF |
| Рабочий файл дизайнера | PSD |
От пикселей к файлу
На экране картинка выглядит гладкой, но в файле это таблица чисел: у каждого пикселя — значения каналов цвета (и, при необходимости, прозрачности). Форматы из справочника ниже — разные способы упаковать эту таблицу компактнее.
Сколько весят сырые пиксели
В типичном 24-битном RGB на пиксель приходится 3 байта — по одному на красный, зелёный и синий (диапазон 0–255). RGBA добавляет альфа-канал → 4 байта на пиксель.
Объём несжатого растра:
ширина × высота × байт_на_пиксель
Пример — скриншот Full HD без сжатия:
1920 × 1080= 2 073 600 пикселей;2 073 600 × 3= 6 220 800 байт ≈ 6,2 МБ (только цвет, без заголовков файла).
Тот же кадр в RGBA занял бы около 8,3 МБ. Именно поэтому BMP и несжатый TIFF для больших фото почти не используют — нужны алгоритмы сжатия.
С потерями и без потерь
| Подход | Идея | Типичные форматы | Когда выбирать |
|---|---|---|---|
| С потерями (lossy) | Отбросить детали, которые глаз почти не заметит | JPEG, WebP lossy, AVIF lossy | Фотографии, плавные градиенты |
| Без потерь (lossless) | Умно закодировать каждый пиксель, восстановление точное | PNG, GIF, WebP lossless, TIFF | Скриншоты, UI, текст, прозрачность |
Подробные конвейеры — в разделах Как JPEG сжимает и Как PNG сжимает ниже. Общая логика lossless (LZ77, Хаффман) совпадает с ZIP и gzip; байтовая структура PNG — в бинарных файлах.
BMP
BMP (Bitmap) – один из самых старых форматов, хранит изображения без сжатия (или с минимальным RLE-сжатием). Не теряет качество, но обладает огромным размером файла. Крайне неоптимальный формат, которым редко пользуются.
Формат BMP был разработан Microsoft в середине 1980-х для операционной системы Windows и стал первым стандартом хранения изображений в графическом интерфейсе. BMP сохраняет цвет каждого пикселя напрямую — без алгоритмов сжатия или с применением простого RLE (Run-Length Encoding), при котором последовательности одинаковых значений заменяются числом повторений. Такой подход обеспечивает полное соответствие исходному изображению, но приводит к большим размерам файлов — например, 4K-изображение (3840×2160) в 24-битном цвете занимает около 23,7 МБ. BMP не содержит метаданных (EXIF, геолокация, авторство), не поддерживает прозрачность и анимацию. Формат используется в системных ресурсах Windows (иконки, курсоры), встроенных приложениях и случаях, где важна максимальная простота декодирования (например, в низкоуровневых драйверах).
JPG
JPG / JPEG (Joint Photographic Experts Group) – формат с потерями для фотографий, отличается хорошим регулируемым сжатием. Самый распространенный формат для изображений в интернете.
Формат JPEG был утверждён международной группой экспертов по фотографии в 1992 году как стандарт сжатия для полноцветных изображений с плавными переходами — в первую очередь, фотографий. Степень сжатия регулируется параметром качества (обычно от 1 до 100). JPEG не поддерживает прозрачность и анимацию, а повторное сохранение одного и того же файла приводит к накоплению артефактов. Несмотря на это, JPEG остаётся самым распространённым форматом в вебе, цифровых фотоаппаратах и социальных сетях благодаря высокой степени сжатия (часто в 10–20 раз меньше сырого RGB) и универсальной поддержке.
Как JPEG сжимает
JPEG — сжатие с потерями: исходные пиксели после декодирования уже не совпадут с оригиналом побайтово, но для фото разница часто незаметна.
-
Учёт зрения. Глаз точнее различает яркость, чем оттенок. Поэтому RGB переводят в YCbCr: отдельно яркость (Y) и два цветоразностных канала (Cb, Cr). Цветовые каналы субдискретизируют — хранят с меньшим разрешением (часто схема 4:2:0: на четыре пикселя яркости — одна пара цветовых значений).
-
Блоки 8×8. Картинку режут на квадраты 8×8 пикселей — так проще анализировать локальные участки.
-
DCT (дискретное косинусное преобразование). Каждый блок переводят из «значений пикселей» в частотные компоненты: плавные градиенты → низкие частоты, мелкие детали и резкие границы → высокие. На фотографиях большая часть энергии обычно в низких частотах.
-
Квантование. Малозначимые коэффициенты (высокие частоты) округляют или обнуляют — здесь и происходит потеря информации. Чем агрессивнее квантование (ниже «качество» в экспорте), тем меньше файл и заметнее артефакты: «блочность», размытие, «кольца» вокруг контрастных контуров.
-
Энтропийное кодирование. Оставшиеся числа сжимают (часто RLE + код Хаффмана) — как в ZIP, но после отбрасывания деталей.
Важно: JPEG — это метод сжатия; файл на диске обычно обёрнут в JFIF или Exif (метаданные камеры, ориентация, миниатюра). Прозрачности в JPEG нет — для иконок и скриншотов нужен PNG или WebP.
Тот же приём (блоки + частотное преобразование + квантование) лежит в основе пространственного сжатия видео — см. Видео. Углублённый разбор растра — 9.08 / Растровая графика.
PNG
PNG (Portable Network Graphics) – формат без потерь с поддержкой прозрачности (альфа-канал), имеющий чёткие контуры, используется в скриншотах, веб-графике и логотипах.
Формат PNG был создан в середине 1990-х как открытая, патентно чистая альтернатива формату GIF, после того как компания Unisys объявила о намерении взимать лицензионные отчисления за использование LZW-сжатия в GIF. PNG не теряет ни одного пикселя при сохранении. Он поддерживает глубину цвета от 1 до 48 бит на пиксель, градации серого и полноценный альфа-канал (256 уровней прозрачности — в отличие от GIF, где прозрачность только "включена/выключена"). PNG сохраняет резкие границы, текст и диаграммы без размытия — идеален для скриншотов и UI. Базовый PNG статичен; анимация — через APNG (поддержка неполная) или WebP. Размер файла у PNG обычно больше, чем у JPEG для фотографий, но меньше — для графики с однородными областями.
Как PNG сжимает
PNG — сжатие без потерь: после распаковки каждый пиксель совпадает с исходным. Конвейер из нескольких шагов:
1. Фильтрация (предсказание). Соседние пиксели часто похожи (небо, фон, заливка). Вместо абсолютных значений RGB PNG по строкам хранит разности с соседом — «на сколько отличается от левого / верхнего». Получаются маленькие числа, их проще сжать. Кодер перебирает режимы (Sub, Up, Average, Paeth) и для каждой строки выбирает лучший.
2. LZ77 — поиск повторяющихся фрагментов в недавно пройденных данных (скользящее окно, обычно до 32 КБ). Вместо второй копии последовательности записывают ссылку «вернись на N байт назад, скопируй M байт». На скриншотах с крупными однотонными областями выигрыш особенно большой.
3. Код Хаффмана — частые значения (например, разность 0) кодируют короткими битовыми последовательностями, редкие — длинными. Та же идея, что в азбуке Морзе: частая буква — короткий сигнал.
Шаги 2 и 3 вместе называются Deflate — тот же стек, что в ZIP и gzip (архивы).
4. Обёртка формата. Сжатые данные упаковывают в чанки: сигнатура ‰PNG, заголовок IHDR (ширина, высота, глубина цвета), один или несколько IDAT с payload, маркер IEND. У каждого чанка — CRC (контрольная сумма): при повреждении файла декодер это замечает. Структура байт — в бинарных файлах; математика энтропии и предела сжатия — в теории информации.
Для фото без однородных зон PNG редко сжимает в 3–10 раз сильнее сырого RGB; для UI и скриншотов — часто в 10–50 раз, при этом каждый пиксель сохраняется.
GIF
GIF (Graphics Interchange Format) – поддерживает анимацию и прозрачность, но только 256 цветов, и подойдёт лишь для простой графики с анимацией и мемами.
Формат GIF был разработан компанией CompuServe в 1987 году и быстро стал стандартом для обмена графикой в раннем интернете. GIF использует индексированные цвета — вся палитра изображения ограничена 256 цветами, каждый пиксель хранит не RGB-значение, а номер в таблице. Сжатие осуществляется алгоритмом LZW, эффективным для изображений с большими одноцветными областями. GIF поддерживает простую анимацию — последовательную смену кадров с задержкой, а также однобитовую прозрачность (один цвет в палитре объявляется прозрачным). Эти свойства сделали GIF популярным для мемов, смайлов, инфографики и декоративных элементов. Однако ограничение палитры приводит к искажению фотографий (появлению "шума" и полос), а отсутствие плавной прозрачности — к "зубчатым" краям. Сегодня GIF часто заменяют на MP4-видео или WebP-анимацию, но он остаётся культурным феноменом и работает везде — даже в самых старых браузерах.
WebP
WebP — формат Google для веба: сжатие с потерями и без потерь, прозрачность и анимация. Поддерживается актуальными браузерами; для старых — JPEG/PNG в <picture> (см. Вектор и растр).
AVIF
AVIF — сжатие на базе AV1: эффективнее JPEG/WebP для многих фото, поддержка HDR и прозрачности. Часто подключают первым источником в <picture>, с WebP и JPEG ниже.
TGA
TGA (TARGA) – формат для хранения растровых изображений с альфа-каналом (поддержкой прозрачности), используется для текстур в играх и рендеров.
Формат TGA был создан компанией Truevision в 1984 году для своих видеоплат и стал стандартом в профессиональной графике, видео- и 3D-индустрии. TGA сохраняет необработанные пиксельные данные с минимальной обработкой — поддерживает RGB, RGBA (с альфа-каналом), градации серого, индексированные цвета, а также метаданные — авторство, комментарии, ориентацию изображения. Формат допускает как несжатое, так и RLE-сжатое хранение. Главное преимущество TGA — предсказуемость — при загрузке изображения в 3D-редактор (например, Blender, Unity, Unreal Engine) или рендер-ферму оно не проходит дополнительной обработки, не теряет альфа-канал и не смещается по координатам. TGA широко используется для текстур (diffuse, normal, specular maps), промежуточных кадров анимации и сохранения результатов рендера до финальной компоновки. Однако из-за отсутствия метаданных вроде EXIF и слабой поддержки в веб-браузерах он не подходит для публикации.
TIFF
TIF / TIFF (Tagged Image File Format) – гибкий формат без потерь, поддерживает слои, сжатие (LZW, ZIP), используется для сканирования документов, полиграфии, отличается высоким качеством и большим размером.
Формат TIFF был разработан в середине 1980-х компанией Aldus (позже приобретённой Adobe) для настольных издательских систем. TIFF — это контейнер — файл состоит из заголовка и набора "тегов" — пар "идентификатор = значение", описывающих разрешение, цветовую модель (RGB, CMYK, Lab), глубину цвета, метод сжатия (LZW, ZIP, JPEG, или без сжатия), ориентацию, геоданные и даже вложенные изображения. TIFF поддерживает многостраничность, слои (в расширении Adobe), альфа-канал и цветовые профили. Это делает его незаменимым в полиграфии (макеты для печати), архивировании (цифровые копии книг, документов), медицине (DICOM основан на TIFF), геоинформатике (геопривязанные снимки) и профессиональной фотографии (RAW-конвертеры экспортируют в TIFF как промежуточный формат). Размер файла может достигать гигабайтов, но качество — максимально возможное для цифрового изображения.
PSD
PSD (Photoshop Document) – внутренний формат Adobe Photoshop, сохраняет слои, маски, эффекты, поддерживает сложные проекты.
Формат PSD — это собственный формат Adobe Photoshop, появившийся вместе с первой версией программы в 1990 году. PSD сохраняет не только пиксельные данные, но и всю историю работы — слои (включая группы и корректирующие), маски, каналы (альфа, выделения), пути (векторные контуры), стили слоя (тень, обводка, градиент), аннотации, руководства и историю действий. Такой файл позволяет продолжить редактирование в точности с того места, где остановились. PSD поддерживает глубину цвета до 30 бит на канал (10 бит на R/G/B), цветовые модели RGB, CMYK, Lab, Grayscale и пространства вроде ProPhoto RGB. Хотя формат проприетарный, его спецификация частично открыта, и многие редакторы (GIMP, Affinity Photo, Krita) умеют читать и записывать PSD с ограничениями. PSD не предназначен для публикации — он рабочий формат дизайнера, "цифровая мастерская".
Save — PSD для продолжения работы;
Save As — копия в JPEG/PNG/TIFF; устаревший Save for Web — лёгкий экспорт.
Связка "мастер PSD → PNG/JPEG для сайта" — конспект Photoshop, глава 2; слои — глава 4.
Как посмотреть свойства файла
Размер PNG в пикселях можно прочитать из заголовка без графических библиотек:
import struct
with open("image.png", "rb") as f:
f.read(8) # сигнатура PNG
f.read(4) # длина блока IHDR
f.read(4) # тип IHDR
width, height = struct.unpack(">II", f.read(8))
print(f"{width}×{height} px")
Сделайте скриншот экрана с текстом и кнопками. Сохраните копию в PNG и в JPEG (качество 80–90). Сравните размер файлов и читаемость мелкого шрифта. Затем экспортируйте ту же область в WebP.