August 26, 2005

  Полевые испытания графических форматов

Перед каждым шароварщиком рано или поздно встает вопрос - какой формат файлов использовать для подготовки графических материалов к программе. Есть ли “правильный” ответ на этот вопрос?

Озадачившись, я решил провести небольшое исследование трех наиболее популярных форматов на пригодность для использования в shareware-индустрии.

Наибольшее распространение и поддержку получили следующие форматы: gif, jpeg и png. Ниже приводится их краткое описание для того, чтобы в дальнейшем было проще понять, как особенности конкретного формата тем или иным образом отразились на качестве и размере файлов.

Формат gif

Формат gif - один из старейших в web. До недавнего времени практически вся web-графика использовала его возможности. Основные преимущества - возможность создания “прозрачных” участков изображения и анимация. Для сжатия используется алгоритм LZW, который используется в архиваторе zip и базируется на нахождении повторяющихся цепочек символов. Минусы - поддержка не более 256 цветов.

Формат jpeg

Второй по популярности формат в области web и первый - в сфере цифровой фотографии. Алгоритм сжатия использует довольно сложные математические модели и преобразования (в частности, дискретно косинусное), учитывает особенности работы человеческого глаза. Замечательной возможностью является манипулирование степенью сжатия - можно получать маленькие файлы, жертвуя качеством и наоборот.

Формат png

Формат png сравнительно молод, поэтому не успел снискать всеобщее признание. Основное отличие от предыдущих - сохраняет оригинальное качество изображения, то есть сжимает без потерь. Это преимущество является и недостатком, так как вы не сможете получить файл маленького размера, пожертвовав качеством. Среди множества других вкусностей поддержка прозрачности и настоящего полноцвета (вплоть до 48 бит на пиксел).

Для того, чтобы как можно сильнее подчеркнуть плюсы и минусы различных форматов, я использовал два тестовых изображения - скриншот своей программы, и фотографию миловидной девушки.

Оценка качества скриншотов

Запускаем программу, нажимаем волшебную комбинацию Ctrl + PrntScrn (сделать скриншот рабочего окна) и последовательно переводим оригинальный файл в различные форматы. Сразу привожу таблицу сравнения, отсортированную по размеру:

screen-gif-128.gif - 21,677 - версия в формате gif, 128 цветов
screen-gif-256.gif - 23,708 - версия в формате gif, 256 цветов
screen-jpeg-low.jpg - 29,258 - jpeg, 10% качество
screen-png.png - 36,577 - формат png
screen-jpeg-medium.jpg - 40,728 - jpeg, 30% качество
screen-jpeg-high.jpg - 63,755 - jpeg 60% качество

Вы можете просмотреть их в отдельном окне и задать себе тот же вопрос, что и я - какие выводы можно сделать просмотра данных изображений?

Прежде всего, jpeg с низким качеством просто безобразен! Его нельзя показать даже родной маме, не то, что потенциальным или состоявшимся покупателям. Jpeg среднего качества смотрится уже лучше, но артефакты все-таки заметны даже невооруженным взглядом, поэтому применять его я бы все-таки поостерегся. Jpeg высокого качества вполне на уровне - атефактов не заметно, цвета естественны.

Как ни странно, примитивный gif даже в варианте с передачей 128 цветов легко бьет jpeg по качеству восприятия! Отсутствие артефактов и меньшее количество цветов приводят к тому, что картинка кажется более резкой. Увеличение количества цветов в два раза, до 256, практически не меняет общей картины, хотя можно заметить, что отдельные детали в этом варианте лучше проработаны. На иконке дискеты, например, появилась тень.

Лидером обзора по качеству стал формат png, что и неудивительно. Никакого сравнения с jpeg! Однако даже в полтора раза меньший скриншот в gif выглядит несильно хуже, чем png.

Полноцветные фотографии

Переходим ко второй части наших испытаний. Для того, чтобы оценить, как поведут себя разные алгоритмы сжатия на полноцветной картинке фотографического качества, я взял фото девушки (довольно миловидной внешности), которое содержало как можно больше различных цветов, а главное - различные плавные переходы, которые наиболее трудно передаются.

Количество пикселов в данной фотографии практически равно количеству пикселов скриншота из прошлого теста, что позволяет сделать достаточно эквивалентное сравнение.

Привожу таблицу картинок, отсортированных в порядке увеличения размера файла - вы можете посмотреть и сравнить их в отдельном окне, кликнув на соотв. ссылке.

photo-jpeg-low.jpg - 14,144 - jpeg, 10% качество
photo-jpeg-medium.jpg - 21,736 - jpeg, 30% качество
photo-jpeg-high.jpg - 44,498 - jpeg 60% качество
photo-gif-128.gif - 73,787 - версия в формате gif, 128 цветов
photo-gif-256.gif - 94,084 - версия в формате gif, 256 цветов
photo-png.png - 323,082 - формат png

Что ж, картина полностью противоположна предыдущей. Первые места хит-парада занимают различные вариации jpeg, затем с большим отрывом следует gif, ну а png оторвался настолько, что и говорить не хочется.

Теперь сравним качество. Говорить о качестве png не приходится - оно на высоте, что и неудивительно при таком размере файла. А вот gif откровенно подкачал - большие площади с плавными переходами цвета залил несколькими близкими цветами из палитры, что сразу бросается в глаза. На фотографию никак не похоже.

Аутсайдер прошлого забега, формат jpeg, вырвался вперед! Удивительно, но даже в самом низком качестве, и при мизерном размере выходного файла ему удалось сохранить фотографию, хотя артефакты и бросаются в глаза. Среднее качество их заметно сглаживает, ну а в высоком их практически не видно, если не приглядываться.

Похоже, что сохранить компромисс качества и размера файла в этом тесте удалось только формату jpeg, причем глядя на результаты его соперников, можно сказать, что удалось это ему просто блестяще!

Выводы

Не претендуя на провозглашение истины в последней инстанции, все же позволю себе сделать достаточно категоричные выводы.

Для обычных скриншотов лучше всего подходит формат gif, который хотя и отображает достаточно небольшое количество цветов, выдает файлы самого маленького размера, которые психологически воспринимаются как весьма качественные.

Для передачи фотографий альтернативы на данный момент нет - jpeg и еще раз jpeg, желательно как можно более высокого качества.

Формат png использовать не стоит - идеальное качество не дает в наших условиях никаких особых преимуществ, а вот размеры файлов способны весьма разочаровать. Да и поддержка пока не на высоте.

P.S: Напоследок - пара слов об оборудовании, которое использовал. Это достаточно неплохой 17″ монитор Philips 107P4 на базе электронно-лучевой трубки с апертурной маской (лучший CRT из всех мной виденных) и видеокарта Matrox G200 - несколько лет назад эта карточка была рабочей лошадкой для многих профессионалов в сфере графики.

P.P.S: Так как возможности воспользоваться LCD-панелью сейчас нет, было бы интересно услышать комментарии людей, работающих с ЖК-мониторами.



Комментарии [5] - на пост “Полевые испытания графических форматов”

  1. Иван

    На ЖК почти все так же как и на CRT. Почти все картинки нормально выглядят, за исключением photo-gif-*** - на них девочка выглядит трупяком…

  2. e-Angel

    PNG сохрани “в палитре”, не 24-бита, а с ограничением. “Сделает” gif по многим статьям

  3. frost

    http://www.vitolab.com/zavada/pngvsgif.html
    Поддерживая e-Angel и будучи убежденным приверженцем png над gif по крайней мере для обычных скриншотов….привел пример, в частности сохранил предоставленный скриншот окна в png при этом использовал палитру 256 цветов. В результате можно однозначно сказать (ктоб сомневался ;) что 23,1KB у Gif не куда не щемится против 13,8KB у Png. Ура товарищи png одержал сокрушительную победу в битве над предоставленным скриншотом, так как смог продемонстрировать меньший на 32% размер.

    ps. Дальнейшее уменьшение цветов в палитре png (128, 64) не принесло сколь значительного уменьшения размера.

  4. Иван Никитин

    Да PNG лучше по размеру и качеству чем GIF. Но PNG коряво поддерживается Internet Explorer! Именно: неполная поддержка формата (например, не поддерживается прозрачность) + заметные искажения в цветовой палитре при отображении (для 8 битных изображений).
    Для скриншотов PNG пойдет, но если требуется стыковка нескольких изображений, он не применим.

  5. Pavel

    Пользуюсь GIF, доволен

Оставить ответ