Дальнейшее сжатие изображений в формате JPG. |
Enotus 2005-04-29 04:30 |
В версии 9.0 архиватора StuffIt используется специальный метод для сжатия изображений в формате JPG. В то время, как обычные архиваторы показывают степень сжатия JPG-файлов около 99%, для архиватора StuffIt заявлено сжатие до 70%. Особое внимание привлекают громкие заявления компании Allume Systems. Кричат: "new, patent pending, compression technology", "revolution in compression". Собственно это самые обычные рекламные лозунги. Однако в среде интересующихся сжатием эти лозунги нашли активную поддержку.
Давайте посмотрим, что это за "революция". Для этого надо представлять, что такое изображения в формате JPG. Формат JPG является самым распространённым и популярным форматом компактного хранения полутоновых изображений (фотографий). Почти всегда используется так называемое сжатие с потерями, когда за счет небольшого ухудшения качества изображения значительно увеличивается степень сжатия и уменьшается размер конечного файла.
Схема формирования или сжатия изображения в формат JPG показана на схеме. Кроме сжатия с потерями в формате JPG существует и беспотерьное сжатие. Однако такое сжатие используется очень редко и в дальнейшем не рассматривается.
![]() |
| Схема сжатия JPG. |
Исходное несжатое изображение (BMP) сначала подвергается преобразованию Фурье (FDCT). Потом выполняется квантование (Quantizer) или, другими словами, округление. После этого данные сжимаются при помощи энтропийного метода (Entropy encoder). Стоит отметить, что подобная схема сжатия характерна для большинства современных форматов медиаданных.
Потеря информации или незначительное ухудшение качества изображения происходит при квантовании или округлении. Но именно такое округление и позволяет получить высокую степень сжатия. Степень и характер округления можно менять в широких пределах, что позволяет подбирать оптимальное сжатие.
Собственно сжатие происходит на стадии энтропийного кодера. Существует несколько вариантов энтропийного кодера. Они отличаются и степенью сжатия, и некоторыми особенностями. В зависимости от исходного изображения и параметров квантования разные методы имеют свои преимущества. Но самым главным отличием является сложность и ресурсоёмкость разных методов. Это очень актуально если учесть, что формат JPG был разработан более 15 лет назад и ориентирован, в том числе и на аппаратную реализацию.
Кроме самого изображения в файлах JPG может храниться произвольная дополнительная информация. Например, комментарии, параметры съёмки. В большинстве случаев она оказывает незначительное влияние на общий размер файла. Тем не менее, для предельного сжатия, эту дополнительную информацию можно удалить.
А теперь давайте, сравним и оценим разные варианты энтропийного кодера на примере.
![]() |
| Тестовое изображение DSCN5081.jpg (2048 x 1536). Взято с www.compression.ca |
Для установки разных вариантов энтропийного сжатия без каких-либо изменений в самом изображении использовалась утилита JPEGTRAN. То есть после использования этой утилиты файл остаётся в формате JPG. Дополнительно взят один из самых лучших архиваторов PAQAR 4.0.
| Программа и параметр | Описание |
| JPEGTRAN -copy none | Простой метод Хаффмана. Без дополнительной информации. |
| PAQAR | Один из самых лучших архиваторов. |
| JPEGTRAN -optimize | Оптимизированный метод Хаффмана. Без дополнительной информации. |
| JPEGTRAN -optimize -progressive | Оптимизированный метод Хаффмана и прогрессивное сжатие. Без дополнительной информации. |
| JPEGTRAN -arithmetic | Арифметическое сжатие. Без дополнительной информации. |
| JPEGTRAN -arithmetic -progressive | Арифметический метод и прогрессивное сжатие. Без дополнительной информации. |
| StuffIt 9.0 | Архиватор со специальным методом для изображений в формате JPG. |
Результаты:
![]() |
| Степень сжатия различных методов. |
Как видно, использование более совершенного варианта сжатия (прогрессивного арифметического сжатия) позволило уменьшить размер файла до 85%. И всё это в пределах стандарта JPG! Однако здесь есть одна проблема. Дело в том, что арифметический вариант энтропийного кодера практически не используется. По крайней мере мне не известен ни один просмотрщик графических файлов, который бы потдерживал этот вариант. Имеется два препятсятвия. Во-первых, арифметичский метод сжатия является патентованным и для его использования необходимо соответсвующее разрешение. Во-вторых, этот метод сложнее и более ресурсоёмок.
Что же касается остальных вариантов энтропийного кодера, они широко распространены. Оптимизированный метод Хаффмана и прогрессивное сжатие можно использовать, по крайней мере, при работе на обычном компьютере. Ресурсов и времени требуется немного больше, но для современных компьютеров это не проблема. Хотя преимущества этого варианта очень небольшие. Всего пару процентов.
Архиватор StuffIt 9.0 сжал JPG файл до 72%. Правда, если сравнивать с прогрессивным арифметическим сжатием получается уже 85%. Каким образом это возможно? Элементарно. Даже прогрессивное арифметическое сжатие не является предельным. Например, в нём совершенно не используется информация о квантовании. За счет замены несовершенного энтропийного кодера StuffIt 9.0 позволяет довольно сильно улучшить сжатие.
Подводя небольшой итог, хочется отметить такую утилиту JPEGTRAN и её параметры "-optimize -progressive". Применив эту утилиту на большой коллекции самых разнообразных изображений в формате JPG объёмом в пару сотен мегабайт, лично я уменьшил размер на 8% без какого-либо ухудшения качества. Эффект небольшой, но почти полностью бесплатный. Проблемы могут возникнуть только при использовании старого программного обеспечения.
Так как JPEGTRAN работает только с одним файлом из командной строки, для обработки директорий можно использовать простейшие команды операционной системы:
for /R DIR_NAME %%i in (*.jpg) do jpegtran.exe -optimize -progressive "%%i" "%%i"
Каждый может по-своему оценить достижения архиватора StuffIt 9.0 и его специального метода для сжатия JPG файлов. Лично я считаю этот метод совершенно обычным и уж ни как не революцией в сжатии. Достижения StuffIt 9.0 обусловлены в большей степени упрощённым вариантом энтропийного кодера JPG, который в свою очередь был выбран из-за простоты реализации. Если Вас интересует высокая степень сжатия, возможно лучше обратить внимание на более современные форматы медиаданных. Например, JPEG 2000. Там такие "революции" совершить гораздо сложнее, если вообще и возможно.
Очень кратко описан принцип сжатия изображений в формате JPG. Рассмотрены недостатки и особенности. Выполнено сравнение разных методов сжатия и метода, использующегося в архиваторе StuffIt 9.0.