03:24 pm

d_e_s_[Link] |
Написал статейку в локальную wiki о том что jpeg не панацея.. Или что такое форматы файлов (для изображений) и чем они отличаются (в контексте уменьшения размера файла).
А то юзеры у нас неграммотные.. =)
Как оптимально уменьшать размер картинкиТема достаточно большая. Изложу вкраце основную суть. Сохранять все в jpeg, не учитывая характер изображения, в надежде получить маленький файл - ошибка. Какие бывают форматы сохранения растровых изображений и их характерные отличия - BMP - формат без сжатия (либо использующий сжатие без потерь RLE). Бывает с индексированной палитрой (256 цветов максимум), бывает с полноцветным описанием цветового пространства. Подходит для чего угодно, но размер файла очень большой.
- JPEG - "Сжатие с потерями". Подходит для изображений в которым много цветовых переходов и нет однородных заливок (пример: фотографии, с некоторыми ограничениями - временные разрезы). Лишь при соблюдении этих условий сжатие будет существенно. Сжатие характеризуется в процентах (но иногда эти проценты показывают разные величины, некоторые проагрммы выражают в них качество картинки (quality), некоторые степень сжатия (Compress Ratio). Т.е. эти данные противоположны). На изображениях с однородными областями, появятся артефакты сжатия, вокруг четких границ. (Есть еще формат Jpeg2000 основанный на фрактальном сжатии, но нам он не нужен :))
- GIF - может содержать от 1 до 256 цветов. Сжатие LZW, более продвинутое по отношению к RLE у BMP, благодаря чему очень хорошо сжимаются изображения с однородными областями (пример: карты - белый фон значителен, общее количество цветов не более двух-трех десятков).
- PNG - практически идентичен GIF, но может содержать кроме индексированной палитры, полноцветную. Сжатие без потерь.
- TIF - универсальный формат. Так называемый контейнер. В большинстве случаев дает более оптимальный результат по отношению к другим форматам. Отличается тем, что может быть в любом цветовом пространстве (black\white, grayscale, индексированый цвет, RGB), и может для сжатия использовать широкий спектр алгоритмов сжатия.
- Deflate - Сжатие без потерь. Хорошо сжимает области с резки контурами, и равномерными областями. Может вызвать проблемы с просмотром в старых программах.
- LZW - Сжатие без потерь. Сжимает изображение благодаря выделению одинаковых кусочков (pattern) и заменой их более короткими кодами. Проблем при просмотре не наблюдается, разве что у самых древних программ.
- RLE - Сжатие без потерь. Самый примитивный алгоритм. Заменяет последовательность одинаковых байтов по принципу XXXXX на 5X
- JPEG - Сжатие с потерями. Удаляется информация, которая глазом не воспринимается (в общем случае), при большом коэффициенте сжатия заметна блочная структура 8x8 пикселей и "мусор" вокруг четких границ. Поддерживается сжатие "серых" (256 оттенков серого) изображений. Файлы TIF с JPEG компрессией, могут вызвать проблемы при просмотре в старых программах.
- ZIP - Сжатие без потерь. Используется обычная компрессия ZIP. Могут быть проблемы при просмотре во многих программах (кроме Adobe Photoshop, ACDSee)
- Packbits - Сжатие без потерь. Подходит для сжатия черно-белых (black\white) изображений. Основан на RLE
- CCIT 3&4 — алгоритм использующийся в факсовых аппаратах (имеет выигрыш в 2 раза по сравнению с черно-белым PNG)
- Calcs - Экзотика. Лучше не использовать.
- Uncopressed, RAW - Без сжатия вообще. Файл гигантских размеров. В общем случае больше чем BMP
- PDF - векторно-растровый формат. Описание займет не один десяток страниц. Переплевывает все выше сказанное, но нужен опыт и понимание :)
Это то что касаемо формата файла. Но есть еще один немаловажный фактор - размер в пикселах(точках). Файл в 10000 точек по какой-либо стороне - явно неудачный выбор для просмотра на мониторе. Поэтому есть смысл (если файл не предназначен для печати), уменьшить его до человекочитабельных размеров. Учтите! Файлы с индексированой палитрой (gif, в поределенных случаях tif, png) либо не будут уменьшаться (правильный подход приложения к ресемплингу таких файлов), либо будут выглядеть ужасно. Для того чтобы этого избежать, надо индексированную палитру перевести в нормальную (RGB), сделать уменьшение, по необходимости вернуть индексированый цвет (будте внимательны! В результате проведенной интерполяции появятся новые оттенки вокруг четких контуров. Учтите это для выделения количества цветов) Теперь относительно того какую интерполяцию выбрать при уменьшении изображения. В разных программах встречаются разные алгоритмы, но основные есть везде. - Bicubic - бикубическая интерполяция. Самая медленная, самая ресурсоемкая, но самая качественная на данный момент. Дает некоторое размыливание изображения если уменьшать размер в порядки. Для использования на больших файлах, должно быть много памяти и терпения.
- bicubic smoofer - тоже самое, но с более "размытым" результатом. Придает "мягкость" изображению.
- bicubic sharper - тоже самое, но с акцентом на усиление резкости границ. Побочный эффект - возникновение ореола вокруг усиленных границ.
- Bilinear - билинейная. Быстрее чем бикубическая, и кроме изрядного "замыливания" вносит небольшие искажения в изображения. Не столь требовательна к ресурсам компьютера.
- Nearest neighborhood - Интерполяция по "ближайшему соседу". Самая примитивная, и самая деструктивная, в отношении изображения, интерполяция.
Есть еще много алгоритмов, такие как lancroz, b-spline, но они менее распространены и выигрыш их использования, видимо, зависит от характеристики самого изображения. Для увеличения картинок вышеперечисленные алгоритмы малопригодны, так как первые два сильно "мылят", а последний вообще не способен создать даже отдаленно напоминающее оригинал. Для увеличения оптимальным является использование фрактальных алгоритмов (Genuine Fractals). Но они очень ресурсоемки, но и качество выше в разы.
|