• Техногрет
  • Оптимизация JPEG. Часть первая

    HTML и CSSXSLTJavaScriptИзображенияСофтEtc
    Сергей Чикуенок

    6 марта 2005


    Многие считают, что оптимизация формата JPEG — это банальный подбор соотношения качества и размера файла, а в сложных случаях — выборочное сжатие. Существует большое количество программ, позволяющих в одно действие уменьшить картинку до очень малых размеров. Но не стоит надеяться, что с помощью какой-то волшебной кнопки можно добиться столь же волшебного результата. Лучше разобраться, что происходит при сохранении JPEG, а потом найти простой и эффективный способ получения лучшего изображения при меньшем объеме файла. Например, путем размещения прямоугольных объектов по восьмипиксельной сетке.

    Рассмотрим пример:


    32×32, Quality: 10 (Photoshop), 396 байт

    Несмотря на низкое значение параметра «Качество», верхний квадрат ровный и чистый, а нижний — «замусоренный»:


    Оба белых квадрата имеют одинаковый размер — 8×8 пикселей. Первый размещен ровно по сетке, а второй смещен на два пикселя вправо и вниз.

    Хозяйке на заметку

    При сохранении изображение разбивается на блоки 8×8 пикселей, и уже в них происходит оптимизация. Так как нижний квадрат не совпадает с ячейками сетки, оптимизатор подбирает «усредненные» цветовые значения между черным и белым цветами (в JPEGе каждый блок 8×8 кодируется набором коэффициентов для синусоиды). Из-за этого вокруг квадрата появляется «мусор».


    Вот пример того, как влияет расположение прямоугольных областей на размер файла и качество изображения. В первом случае печь расположена случайным образом. А перед сохранением второго файла изображение смещено так, чтобы угол решетки совпал с восьмипиксельной сеткой. Оба изображения сохранены с одинаковым качеством (55):


    13,51 КБ

    12,65 КБ

    А вот так это выглядит при увеличении (красным отмечены границы ячеек восьмипиксельной сетки):


    Продолжение следует.

    1
    2
    3