Как пиксели превращаются в миллионы оттенков
Экран смартфона, планшета или монитора устроен как гигантская мозаика. Если капнуть чистой водой на экран или посмотреть на матрицу через сильную лупу, станут видны крошечные прямоугольники. Каждый пиксель физически состоит из трёх микроскопических светодиодов или светофильтров красного, зелёного и синего цветов. В информатике эту цветовую модель называют RGB — по первым буквам английских слов Red, Green, Blue.
Для записи яркости каждого луча компьютер использует ровно один байт памяти. Один байт состоит из 8 бит и позволяет сохранить любое целое число в диапазоне от 0 до 255. Ноль означает полное отсутствие свечения, а 255 указывает на предельную яркость диода.
- Черный цвет получается при комбинации (0, 0, 0), когда все три лампочки выключены.
- Белый цвет дает максимальная яркость всех компонентов (255, 255, 255).
- Яркий красный цвет кодируется значениями (255, 0, 0).
- Желтый свет возникает при одновременном включении красного и зеленого лучей на максимум (255, 255, 0).
- Пурпурный оттенок дает равенство красного и синего компонентов (255, 0, 255).
Перемножив 256 вариантов красного, 256 вариантов зелёного и 256 вариантов синего, получаем 16 777 216 возможных оттенков. Такой режим кодирования называют True Color или 24-битный цвет. Этого запаса хватает, чтобы человеческий глаз воспринимал плавные градиенты без ступенчатых переходов.
Сколько весит изображение без сжатия
Камера обычного смартфона делает снимки с разрешением около 12 мегапикселей. Это матрица размером 4000 на 3000 точек. Всего на такой фотографии умещается 12 миллионов отдельных пикселей.
На каждый пиксель уходит 3 байта информации по схеме RGB. Простое умножение 12 000 000 на 3 дает 36 000 000 байт. Это примерно 34,3 мегабайта данных для одного кадра. Альбом из тысячи таких снимков мгновенно заполнил бы почти 35 гигабайт встроенной памяти телефона. Передавать такие тяжёлые файлы по мобильному интернету было бы слишком медленно и накладно.
Принцип работы алгоритма JPEG
Стандарт сжатия JPEG разработала объединённая группа экспертов по фотографии в 1992 году. Создатели формата опирались на особенности биологического строения нашего зрения. В сетчатке человеческого глаза находятся рецепторы двух видов — палочки и колбочки. Палочек насчитывается около 120 миллионов, они отвечают за сумеречное зрение и улавливают мелкие границы и перепады яркости. Колбочек всего около 6-7 миллионов, поэтому глаз воспринимает мелкие цветовые нюансы намного слабее, чем контуры объектов.
Алгоритм сжатия выполняет четыре последовательных действия.
- Переводит картинку из палитры RGB в модель YCbCr, где параметр Y хранит информацию о яркости, а Cb и Cr отвечают за оттенки синего и красного.
- Уменьшает разрешение цветовых каналов в два или четыре раза, оставляя яркостную составляющую в исходной чёткости.
- Разрезает снимок на маленькие квадраты размером 8 на 8 пикселей и вычисляет математическую плавность изменения цвета внутри каждого квадрата.
- Выбрасывает сверхвысокие частоты и сохраняет только крупные переходы цвета, кодируя оставшиеся данные экономным кодом Хаффмана.
Почему портятся контрастные рисунки и надписи
Формат JPEG создавался исключительно для реалистичных фотографий природы, людей и городских пейзажей, где цвета меняются естественно и плавно. Формулы разбиения на блоки отлично справляются с мягкими тенями на коже или листве деревьев.
При попытке сохранить в JPEG скриншот переписки, логотип или схематичный рисунок алгоритм даёт сбой. Резкая граница между чёрным текстом и белым фоном внутри блока 8 на 8 пикселей математически выглядит как бесконечный всплеск частоты. Пытаясь сгладить этот перепад, программа создаёт вокруг букв грязный серый шум. Для скриншотов, схем и иконок используют формат PNG, который сжимает файлы без потери резкости контуров.
Частые вопросы
Почему при сильном увеличении картинки в JPEG видны именно квадраты?
Математический алгоритм сжатия обрабатывает изображение отдельными матрицами размером 8 на 8 пикселей. При максимальном сжатии программа грубо усредняет цвет всего квадрата, из-за чего границы между соседними блоками становятся заметными.
Можно ли восстановить исходное качество фотографии после сохранения в JPEG?
Восстановить потерянные данные невозможно. Алгоритм безвозвратно удаляет информацию о мелких цветовых переходах ради экономии места на диске.
Чем формат PNG отличается от формата JPEG?
Формат PNG использует алгоритм сжатия без потерь, аналогичный обычному архиватору ZIP, и сохраняет каждый пиксель в точности, поддерживая прозрачность фона. Формат JPEG намеренно искажает цвета ради уменьшения веса файла в 10-20 раз.
Что означает ползунок качества при сохранении снимка?
Этот ползунок регулирует степень округления чисел в матрицах квантования. Значение 100 оставляет картинку близкой к оригиналу, а значения ниже 60 резко сжимают размер файла, добавляя размытие и блочные искажения.