Всем привет, сегодня мы немного рассмотрим графический формат JPEG, а также алгоритмы сжатия данных, с потерями и без потерь.
Графический JPEG формат является одним из самых популярных. Он имеет много преимуществ, и поэтому стал очень распространенным и широко поддерживаемым. Но это не единственный формат, подходящий для фото и его использование приносит ряд подводных камней, которые мы рассмотрим.
Из прошлой статьи "Цифровые изображения - пиксели, разрешение и глубина цвета", выяснилось, что одна 6-Мегапиксельная фотография в графическом формате файла JPEG, хранящаяся в 24 битной глубины цвета (8 бит на канал) должна иметь размер 18 МБ. Если Вы используете глубину цвета 48 бит (16 бит/канал), фотографии будут иметь даже 36 МБ. Желание уменьшить вес картинки, привело к созданию алгоритмов сжатия.
Сжатие без потерь
Принцип сжатия заключается в скремблировании данных таким образом, чтобы выходной файл был меньше чем оригинальный. Представьте себе, например, ряд из 30 цифр:
9 7 3 0 0 0 0 0 0 0 0 0 9 9 9 9 9 9 6 7 6 3 7 6 5 5 5 5 5 5
Если договориться, что символ "n/B" будет означать n-е повторение числа B, то можно эти 30 чисел преобразовать следующим образом:
9 7 3 "9/0" "6/9" 6 7 6 3 7 6 "6/5"
На первый взгляд, очевидно, нам нужно теперь только 15 цифр. На 100% можно реставрировать первоначальный ряд, и, следовательно, никаких потерь информации нет. Это принцип сжатия без потерь.
Сжатие без потерь используется, например, популярными ZIP архиваторами, которыми обычно упаковывают различные виды данных. Тот факт, что исходные данные можно на 100% восстановить, идеально подходит для общей упаковки чего-либо - например, компьютерных программ, текстов, а также фотографий в графическом формате JPEG. Алгоритм фактического сжатия, конечно, гораздо сложнее, чем приведенный выше пример, он использует статистическую избыточность данных. Степень сжатия, или соотношение размеров оригинальных данных к сжатым, сильно зависит от содержания - чем больше избыточность данные, тем больше удастся их уменьшить. В отношении графики, уровень сжатия лучше всего достигается для монотонных изображений.
Сжатие с потерями
При сжатии с потерями удаляются ненужные и неинтересные детали (цифры, буквы, слова и т.п.). Примером может быть значительное сокращение этой статьи на десятую часть, или какой-то аннотации. Главная идея остается, мелкие детали, однако, безвозвратно теряются. Никогда уже не получится восстановить оригинал, хотя усеченная версия будет в целом напоминать оригинал по смысловому содержимому. Когда повышается степень сжатия, снижается качество или сходство оригинала и копии.
Потерями сжатия трудно управлять каким-то образом в целом. Гораздо лучших результатов можно достичь тогда, когда сжатие предназначено для определенного типа содержимого. И поэтому, например, для видео используется MPEG или DivX, для музыки MP3, а для фотографий графический формат сжатия JPEG.
Знание содержимого позволяет предложить именно такой алгоритм сжатия, чтобы безвозвратно удаленные детали были заметны как можно меньше и чтобы сжатый результат субъективно лучше всего напоминали оригинал. Графический JPEG формат сжатия использует сжатие с потерями так, чтобы максимально уменьшить размер файла, но при этом как можно меньше исказить фотографию.
Графический формат JPEG – небольшое описание
JPEG - это аббревиатура от Joint Photographic Experts Group, являющаяся названием комиссии, которая была создана в 1986 году и в 1992 году создала стандарт для хранения и сжатия JPEG изображений. Графический формат JPEG использует сжатие с потерями. Разница в оригинале и сжатой копии есть, но глазом она незаметна и, кроме того, степень сжатия JPEG файла можно регулировать в довольно широком диапазоне. Графический формат файла JPEG подойдёт, как там, где необходимо максимальное качество фотографии (например, печать), так и там, где предпочтителен размер файла (интернет, почта).
Окончательная экономия размера графического формата файла JPEG зависит не только от выбранной степени сжатия, но и от содержания фотографии. Резкие фотографии полны мелких деталей (например, поле или трава) и их можно сжимать гораздо меньше, чем, например, портрет с расфокусированным фоном.
Алгоритм кодирования в графическом формате JPEG можно очень упрощенно описать следующим образом:
- Входное изображение из цветовой модели RGB преобразуется в модель YCbCr, которая отдельно хранит канал яркости Y и две цветные компоненты Cb и Cr. Подобный способ передачи используется и в телевидении, в системе PAL или цветовой модели L*a*b.
- Причина перевода в YCbCr в том, что глаз гораздо менее чувствителен к изменениям в цвете, чем в яркости. Другими словами - цвета можно сжимать гораздо больше, чем яркость и глаз этого сжатия не заметит. Это само по себе значительно уменьшает размер конечного графического формата файла JPEG.
- Следующий шаг применяется в равной степени к Y, Cb и Cr компонентам, когда JPEG изображение делится на пиксельные квадраты 8х8, и в них, с помощью, так называемого, дискретного косинусного преобразования (DCT), происходит поиск повторяющихся образцов.
- В заключение, на результат еще применяется JPEG сжатие без потерь и результат сохраняется как графическом формате файла JPEG (jpg расширение).
Недостатки графического формата файлов JPEG
Графический формат JPEG хотя и очень популярный, но обладает рядом недостатков:
- Файл изображения в формат JPEG не поддерживает более высокую глубину цвета и всегда работает с глубиной цвета "всего лишь" 24 бита (т.е. 8 бит/канал). Поэтому, он не позволяет использовать более 12-битного цвета на канал, полученного, например, из RAW формата.
- JPEG формат не поддерживает прозрачность и не в состоянии сохранить изображения с прозрачным фоном. Прозрачность при создании компьютерной графики и коллажа часто необходим, и поэтому необходимо прибегать к другим графическим форматам (TIFF, PNG, GIF, PSD и т.д).
- Из-за используемого метода сжатия, формат сжатия JPEG не подходит для хранения графики (рисунки, графики, диаграммы, иконки, скриншоты и т.п.). Алгоритм сжатия JPEG отображается на линиях и буквах, они смазываются, и тем самым ухудшается их внешний вид и читаемость.
- Графический JPEG формат не поддерживает анимацию (движущиеся картинки). Это область GIF или Flash данных.
- Графический формат файлов JPEG не поддерживает сжатия без потерь. Сжатие всегда с потерями, однако, при высоком качестве результат абсолютно неразличим, например, от сжатия без потерь в TIFF.
- JPEG формат не поддерживает сохранение изображения, содержащего несколько слоев. Это область TIFF или, скорее, PSD.
- JPEG графический формат не поддерживает векторную графику, подходит только для фотографий.
- Повторное сохранение в формате JPEG ухудшает фото.
Конечно, хотя JPEG и обладает недостатками, но он по-прежнему популярный.
Спасибо за внимание. Автор блога Владимир Баталий