Содержание

Как я могу сжать изображения?

Слово «сжатие», по-видимому, неправильно истолковано в этом вопросе, но оно все же верно в зависимости от контекста, который вы хотите увидеть.

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

Многие из ответов, похоже, относятся к другим вещам, в основном вызванным из-за, вероятно, того, что они не сталкивались с такими пейзажами. Вот почему я начинаю объяснять это.

Так. Давайте разберемся, какой ответ нужно решить:

  1. Картинка ДОЛЖНА быть легкой
  2. Изображение ДОЛЖНО быть «сжато», чтобы потерять размер файла, но не «изменено в размере», как указано другим пользователем, указавшим на дублированный по этому вопросу пакетное сжатие и переименование JPG (find -exec, xargs, piping?)
  3. Изображения должны быть пакетно сжаты, предпочтительно через графический интерфейс.

Давайте сначала разберемся, какой должна быть «легкая картинка».

Изображения высокого разрешения с разрешением более 1024 пикселей могут иметь большой размер файла. Я приведу пример на этом скриншоте:

В окне свойств файла мы видим, что это файл размером 9,5 МБ, который сильно задерживает загрузку и много задерживает для отображения на экране при публикации на веб-сайте.

Тем не менее, размер изображения и разрешение сетки действительно полезны для печати высокой четкости. Так что это другой пейзаж, который я не буду освещать в этом объяснении.

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

И когда мы говорим о «сжатии», нам явно необходимо изменить его качество, чтобы сделать его пригодным для использования в нашем случае.

Итак, давайте бросим следующее в терминале:

convert seminario-tabloide.png test.jpg

Это собирается преобразовать формат PNG высокой четкости в «сжатый» формат JPG, который сам по себе является меньшим файлом! Это идет от 9,5 МБ до 2,4 МБ.

Но 2,4 МБ — это все же большой размер файла. Теперь давайте поиграем с некоторыми другими командами преобразования ImageMagick , чтобы создать файлы меньшего размера:

convert test.jpg -quality 50% test-50p.jpg

Это то, что нам нужно сделать, чтобы «сжать» изображение. Это приведет к снижению качества изображения на 50% и предоставлению файла размером 938,4 КБ <=== (примечание: килобайты, даже не мегабайты).

Мы можем пойти дальше и создать файл меньшего размера, изменив процент в той же команде с помощью:

convert test.jpg -quality 30% test-30p.jpg

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

В настоящее время. Мы можем сделать что-то другое. Пара вещей действительно: мы можем сначала изменить размеры изображений и затем применить сжатие, что приведет к меньшему размеру файла, чем оригинал, и предоставит полезное изображение для рендеринга на экране, не очень хорошее для печати, но, кажется, мы нужно отображать его на экране, а не в печатном баннере, верно?

Итак, давайте сделаем это:

convert seminario-tabloide.png -resize 1024x test-1024x.jpg

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

Теперь … угадайте что?

Размер файла уменьшен с 9,5 МБ до … (ждите музыку с конгами, пожалуйста) 433,7 КИЛОБАЙТОВ

Если мы хотим максимально сжать максимально сжатый файл, как этот, мы столкнемся с некоторыми дополнительными данными, вставленными в файл, и это приведет к увеличению размера файла. Так что я не буду предлагать вам попробовать, но если вы ожидаете, что я сделаю пример, хорошо … Вот и мы!

convert test-1024x.jpg -quality 50% test-1024x-50p.jpg

И мы поднялись с 433,7 КБ до 176,2 КБ за одну команду. Этот пример был успешным, тем не менее, не ожидайте, что какие-либо упражнения приведут к меньшему размеру файла. Но вы можете получить массу удовольствия, выполняя подобные упражнения.

Ой! Но я почти забываю одну из потребностей: применить этот процесс к множеству фотографий с легкостью.

Для такой вещи мы можем сделать это с двумя процессами.

Терминал

Это быстрее и проще. Итак, давайте скажем терминалу, что нам нужно выполнить одну и ту же инструкцию во всех файлах в каталоге, после чего я объясню другую инструкцию.

Конвертировать все в 1024px (вы можете использовать любое количество пикселей)

for i in *; do convert $i -resize 1024x $i-1024x.jpg; done;

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

Уменьшите качество в процентах (используйте любой процент, какой пожелаете) для всех изображений в каталоге:

for i in *-1024x.jpg; do convert $i -quality 50% $i-50p.jpg; done;

Здесь мы просим уменьшить качество изображений, чтобы уменьшить его размер.

Вы можете играть с этими командами и увидеть свои результаты. После нескольких часов веселья вы станете экспертом.

Наутилус Скрипт

20 апреля 2015 года я столкнулся с такой ситуацией, как первоначальный вопрос, поэтому мне пришлось провести некоторое исследование и попросить помощи по вопросу. Вот почему теперь я знаю много этого. Не думай, что я родился с этим знанием, чувак.

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

Для получения инструкций о том, как это сделать, прочитайте вопрос, ответ и комментарии здесь: Как выполнить пакетную обработку изображений JPG, чтобы изменить их качество с помощью Nautilus-Actions?

Удачи!

JPEG. Алгоритм сжатия / Хабр

И снова здравствуйте! Я нашел эту статью, написанную еще мае 2019-ого года. Это — продолжение серии статей о WAVE и JPEG, Вот первая. Эта публикация включит в себе информацию об алгоритме кодирования изображений и о самом формате в целом.


Щепотку истории

Столовую ложку статьи из Википедии:


JPEG (Joint Photographic Experts Group) — один из популярных растровых графических форматов, применяемый для хранения фотоизображений и подобных им изображений.

Разработан этот стандарт был Объединенной группой экспертов по фотографии еще в 1991 году для эффективного сжатия изображений.


Какой путь проходят изображения от сырого вида до JPEG

Некоторые считают, что JPEG-картинки — сжатые методом Хаффмана сырые данные, но это не так. Перед контрольным сжатием данные проходят длинный путь.

Сначала цветовую модель меняют с RGB на YCbCr. Для этого даже есть специальный алгоритм — здесь. Y не трогают, так как он отвечает за яркость, и его изменение будет заметно.

Первое, что делают с изображением — это «прореживание» (subsampling). Понять это просто: берется 2х2 массив пикселей, далее берутся Cb и Cr — средние значения каждого из компонентов YCbCr этих 4 пикселей. И так, мы выиграли 6 байт, вместо 4 Y, 4 Cb, 4 Cr мы получили 4 Y и одинаковые для каждого из них Cb и Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). В масштабах даже 2×2 сжатие с потерей с коэффициентом сжатия 2:1 звучит солидно. Это применяется ко всему изображению. И так — сбросили половину размера. А такой прием мы можем использовать благодаря нашему цветовому восприятию. Человек с легкостью заметит разницу в яркости, но не в цвете, если он усредненный в маленьком блоке пискелей. Также прореживание может выполняться в линию, 4 пикселя по горизонтали и вертикали. Первый вариант используется чаще. Если важно качество изображения, то прореживание не выполняется вообще.

Наглядная иллюстрация прореживания (Хабр не дал вставить гифку) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif


Основная часть подготовки

ДКП

Теперь самая сложная и необходимая часть. Вся картинка разбивается на блоки 8×8 (используют заполнение в случае, если разрешение не кратно стороне блока).

Теперь к каждому блоку применяют ДКП (Дискретно-косинусное преобразование). В этой части из картинки вынимают все лишнее. Используя ДКП надо понять, описывает ли данный блок (8×8) какую-нибудь монотонную часть изображения: неба, стены; или он содержит сложную структуру (волосы, символы и т.д.). Логично, что 64 похожих по цвету пикселей можно описать всего 1-им, т.к. размер блока уже известен. Вот вам и сжатие: 64 к 1.

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


Квантование

Тут уже применяются настройки сжатия. Каждый из коэффициентов в каждой из матриц 8×8 делится на определенное число. Если качество изображения после всех его модификаций вы более уменьшать не будете, то делитель должен быть единицей. Если вам важнее память, занимаемая этой фотографией, то делитель будет больше 1, и частное округляется. Так выходит, что после округления нередко получается много нулей.

Квантование делают для создания возможности еще большего сжатия. Вот как это выглядит на примере квантования графика y = sin(x):


Сжатие

Сначала проходим по матрице зиг-загом:

Получаем одномерный массив с числами. Мы видим, что в нем много нулей, их можно убрать. Для этого вместо последовательности из множества нулей мы вписываем 1 нуль и после него число, обозначающее их количество в последовательности. Таким образом можно сбросить до 1/3 размера всего массива. А дальше просто сжимает этот массив методом Хаффмана и вписываем уже в сам файл.


Где используется

Везде. Как и PNG, JPEG используется в фотокамерах, OS’ях (в качестве логотипов компании, иконок приложений, thumbnail’ов) и во всех возможных сферах, где нужно эффективно хранить изображения.


Вывод

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

, но гранит науки все-же вкусный.


Источники

Статья про YCbCr на Википедии
Статья о JPEG на Википедии
Немного про ДКП с поста Пикабу
Статья о ДКП на Википедии

Пакетное сжатие JPEG-изображений в нескольких директориях

Пакетное сжатие JPEG-изображений в нескольких директориях

Оптимизаторы в работе нередко сталкиваются с необходимостью быстро сжать большое количество изображений.

Это необходимо:

  • для увеличения скорости загрузки страницы;
  • для улучшения оценки в тесте PageSpeed Insights от Google.

Массовое сжатие .jpg изображений, расположенных в нескольких директориях, реализовывал при помощи программы IrfanView. Программа может как перезаписать старые изображения, так и создать папки в новом месте. Названия папок при этом сохранятся. IrfanView видит и обрабатывает также вложенные директории.

Методика

  1. 1. Скачиваем программу. Я скачивал с первого указанного хранилища файлов (оно внешнее).
  2. 2. Устанавливаем. При установке программа предложила дополнительное программное обеспечение одного известного западного интернет-магазина. Не забудьте снять галочки.
  3. 3. Если собираетесь сжимать уже опубликованные картинки, то с хостинга скачиваем директории с изображениями.
  4. 4. В меню программы File выбираем Batch Conversion/Rename… («batch» в переводе с английского означает «группа», «серия», «пария»).
  5. 5. Добавляем все изображения из папок, для этого:
    1. a. Выделяем все папки с картинками.
    2. b. Устанавливаем тип файлов JPG/JPEG (если в папках будут присутствовать изображения других форматов, они будут игнорироваться).
    3. c. Ставим галочку Include subdirectories (for ‘Add all’…), включить поддиректории, чтобы программа могла работать с несколькими папками, а так же вложенными папками.
    4. d. Нажимаем Add all.
  6. 6. Нажав Browse выбираем директорию, где будут сохранятся папки со сжатыми изображениями.
  7. 7. Нажав Options переходим к настройкам сжатия:
    1. a. Бегунком указываем качество изображений на выходе. Чтобы лучше понять, до какого уровня можно сжимать картинки без заметной потери качества, я делаю несколько тестовых сжатий на небольшом количестве.
    2. b. Снимаем все галочки кроме первой, Save as progressive JPG. Благодаря этой опции изображение может показываться до полной загрузки в некоторых браузерах. Плюс к этому прогрессивный формат не должен утяжелять картинку, а наоборот, в большинстве случаев даже делать немного легче.
      Убирая остальные галочки, мы убираем дополнительную информацию об изображении: авторство, способ получения, информацию об устройстве, которым был сделан снимок, условия  при которых был сделан снимок и т.д. Если эту информацию оставить, изображение не пройдет тест PageSpeed Insights.
    3. c. Нажимаем ОК.
  8. 8. Отмечаем Use advanced options (for bulk resize…) и нажимаем Advanced:

    Здесь я ставлю только одну галку, необходимую для того, чтобы в конечной директории создавались поддиректории (иначе сжатые изображение будут размещены в одной папке):

    Нажимаем OK.
  9. 9. В основном окне нажимаем Start Batch.

На этом всё. При сжатии программа сохранит имена изображений и названия папок.

Таким образом мне удалось сжать одним махом около 19 тыс. изображений товаров. При выполнении большого количества операций Windows выдавала сообщение, что программа не отвечает. Однако, заходя в папку назначения, по нарастающему количеству сжатых изображений я убеждался, что процесс идёт. Обработка заканчивалась всегда успешно.

Пакетное сжатие JPEG-изображений в нескольких директориях

Опубликовано: 23.08.2015. Обновлено: 16.08.2019 25 673 18

Оптимизаторы в работе нередко сталкиваются с необходимостью быстро сжать большое количество изображений.

Это необходимо:

  • для увеличения скорости загрузки страницы;
  • для улучшения оценки в тесте PageSpeed Insights от Google.

Массовое сжатие .jpg изображений, расположенных в нескольких директориях, реализовывал при помощи программы IrfanView. Программа может как перезаписать старые изображения, так и создать папки в новом месте. Названия папок при этом сохранятся. IrfanView видит и обрабатывает также вложенные директории.

Методика

  1. 1. Скачиваем программу. Я скачивал с первого указанного хранилища файлов (оно внешнее).
  2. 2. Устанавливаем. При установке программа предложила дополнительное программное обеспечение одного известного западного интернет-магазина. Не забудьте снять галочки.
  3. 3. Если собираетесь сжимать уже опубликованные картинки, то с хостинга скачиваем директории с изображениями.
  4. 4. В меню программы File выбираем Batch Conversion/Rename… («batch» в переводе с английского означает «группа», «серия», «пария»).
  5. 5. Добавляем все изображения из папок, для этого:
    1. a. Выделяем все папки с картинками.
    2. b. Устанавливаем тип файлов JPG/JPEG (если в папках будут присутствовать изображения других форматов, они будут игнорироваться).
    3. c. Ставим галочку Include subdirectories (for ‘Add all’…), включить поддиректории, чтобы программа могла работать с несколькими папками, а так же вложенными папками.
    4. d. Нажимаем Add all.
  6. 6. Нажав Browse выбираем директорию, где будут сохранятся папки со сжатыми изображениями.
  7. 7. Нажав Options переходим к настройкам сжатия:
    1. a. Бегунком указываем качество изображений на выходе. Чтобы лучше понять, до какого уровня можно сжимать картинки без заметной потери качества, я делаю несколько тестовых сжатий на небольшом количестве.
    2. b. Снимаем все галочки кроме первой, Save as progressive JPG. Благодаря этой опции изображение может показываться до полной загрузки в некоторых браузерах. Плюс к этому прогрессивный формат не должен утяжелять картинку, а наоборот, в большинстве случаев даже делать немного легче.
      Убирая остальные галочки, мы убираем дополнительную информацию об изображении: авторство, способ получения, информацию об устройстве, которым был сделан снимок, условия  при которых был сделан снимок и т.д. Если эту информацию оставить, изображение не пройдет тест PageSpeed Insights.
    3. c. Нажимаем ОК.
  8. 8. Отмечаем Use advanced options (for bulk resize…) и нажимаем Advanced:

    Здесь я ставлю только одну галку, необходимую для того, чтобы в конечной директории создавались поддиректории (иначе сжатые изображение будут размещены в одной папке):

    Нажимаем OK.
  9. 9. В основном окне нажимаем Start Batch.

На этом всё. При сжатии программа сохранит имена изображений и названия папок.

Таким образом мне удалось сжать одним махом около 19 тыс. изображений товаров. При выполнении большого количества операций Windows выдавала сообщение, что программа не отвечает. Однако, заходя в папку назначения, по нарастающему количеству сжатых изображений я убеждался, что процесс идёт. Обработка заканчивалась всегда успешно.

Сжатие изображения JPEG / JPG онлайн, уменьшение размера изображения на 99%

Ниже приведен краткий обзор настроек и условий:

Image Quality — Отрегулируйте качество выходного изображения. Снижение качества на 1% приведет к уменьшению размера сжатого изображения.

Max Size — Max Size (or Максимальный размер) Значит это он сохраняет размер выходного изображения меньше заданного максимального размера. Например, если вы не хотите, чтобы сжатое изображение было больше 100 КБ, введите 100 КБ в максимальном размере, а затем примените изменения.

Min Size — Min Size (or Минимальный размер) Значит это он сохраняет размер выходного изображения больше заданного минимального размера. Например, если вы хотите, чтобы сжатое изображение было больше 500 КБ, введите 500 КБ в минимальном размере, а затем примените изменения.

Exact Image Resize — Это просто означает изменение размера вашего изображения для любого точного разрешения. И ширину, и высоту нужно было установить, так как она не поддерживала соотношение сторон.

Exact Image Resize Crop — Это будет работать, когда вы установите Exact Image Resize значений. Это обрезает ваше изображение в заданном измерении, а не растягивает его.

Scale Down Image Resolution — Выберите и измените размер изображения в процентах, сохраняя соотношение сторон. Это лучше чем Exact Image Resize.

Convert this image to JPEG — Включите эту опцию, если хотите конвертировать PNG-изображение в JPEG. Рекомендуется, если ваше изображение не может иметь прозрачность.

Convert to grayscale — Включение этой опции удалит цвета с вашего изображения и уменьшит размер вашего изображения.

Add label to the end of the filename — Отключите эту опцию, если вы не хотите добавлять метку в конец имени файла сжатого изображения. Метки не будут добавлены к файлам в ZIP.

Битрикс — Оптимизация и сжатие изображений OptiPic.io

1.13.0 (04.02.2021) Оптимизация логики автоматической подмены изображений.
1.12.0 (01.02.2021) Оптимизация логики автоматической подмены изображений.
1.10.0 (01.01.2021) Оптимизация логики автоматической подмены изображений.
1.8.2 (24.12.2020) Улучшение интерфейса. Обновление логики автозамены изображений.
1.8.1 (14.12.2020) Оптимизация логики автоматической подмены изображений.
1.8.0 (14.12.2020) Оптимизация логики автоматической подмены изображений.
1.7.9 (07.12.2020) Оптимизация логики автоматической подмены изображений.
1.7.8 (25.11.2020) Улучшена логика автозамены изображений
1.7.7 (24.11.2020) Улучшение интерфейса
1.7.6 (24.11.2020) — Поддержка атрибутов srcset. — Улучшение интерфейса настроек.
1.7.5 (01.11.2020) Добавлены новые настройки CDN: — Список доменов (если изображения грузятся через абсолютные URL). — Страницы сайта, на которых не включать автоподмену. — Подменять только URL изображений, начинающихся с маски (/upload/, /upload/test.png и т.п.).
1.7.4 (21.06.2020) Улучшения интерфейса настроек модуля
1.7.3 (29.04.2020) Добавлена поддержка работы с такими URL изображений, в которых содержатся пробелы.
1.7.2 (21.02.2020) Исправлена проблема перехода на CDN с классической интеграции для модулей, которые были установлены до 04.01.2020
1.7.1 (17.02.2020) CDN: Оптимизация логики автозамены url изображений
1.7.0 (06.02.2020) Улучшение интерфейса установки модуля. Улучшение интерфейса настроек модуля.
1.6.9 (30.01.2020) CDN: Оптимизация логики автозамены url изображений
1.6.8 (04.01.2020) Обновлен URL API Классической интеграции. Добавлен новый режим интеграции — CDN. Преимущества интеграции через CDN: 1. Автоматическая конвертация в WebP (с учетом браузера посетителя сайта). Для браузеров, поддерживающих webp, изображения отдаются в webp формате. Браузеры без поддержки webp получают оптимизированные/сжатые png/jpeg изображения. 2. Адаптирует изображения под мобильные телефоны 3. Кеширует и ускоряет загрузку изображений. Более подробно: https://optipic.io/ru/cdn/diff/
1.6.7 (10.07.2019) Оптимизация логики переиндексации
1.6.6 (15.04.2019) Оптимизация логики шаблонов инфоблока. Улучшения интерфейса управления модулем.
1.6.5 (06.04.2019) Улучшение логики возврата оригиналов
1.6.4 (21.01.2019) Оптимизация логики возврата и удаления оригиналов
1.6.3 (28.07.2018) Улучшен механизм фонового сжатия. Добавлена опция «Прогрессивный jpeg». Добавлена опция «Удалять служебную информацию из изображений». Улучшен интерфейс управления модулем.
1.6.2 (25.07.2018) Улучшение для обхода ошибок чтения папок.
1.6.1 (25.07.2018) Улучшение для обхода ошибок чтения папок.
1.6.0 (19.07.2018) Оптимизация производительности
1.5.9 (26.06.2018) Оптимизация производительности и анализа статистики.
1.5.8 (26.06.2018) Оптимизация переиндексации
1.5.7 (25.06.2018) Оптимизация переиндексации
1.5.6 (31.01.2018) Исправлена опечатка
1.5.5 (23.11.2017) Обновление API
1.5.4 (03.11.2017) Обновление API
1.5.3 (07.09.2017) Добавлена возможность задавать шаг возврата оригиналов.
1.5.2 (07.09.2017) Оптимизация возврата оригиналов.
1.5.1 (04.09.2017) Оптимизация логики. Улучшение работы шаблонов инфоблока. Улучшенная работа с resize_cache.
1.5.0 (19.08.2017) Системное обновление
1.4.9 (18.08.2017) Служебное обновление структуры БД
1.4.8 (16.08.2017) Оптимизирован вывод картинки модуля в административном меню.
1.4.7 (10.08.2017) Оптимизация SQL
1.4.6 (07.08.2017) Служебный фикс
1.4.5 (03.08.2017) Регистронезависимость расширения
1.4.4 (03.08.2017) Обновление в API
1.4.3 (03.08.2017) Улучшенное отображение эффективности сжатия в статистике
1.4.2 (02.08.2017) Исправлено нескольк недочетов.
1.4.1 (14.07.2017) Служебное обновление
1.4.0 (14.07.2017) Служебное обновление. Исправлены некоторые опечатки и неактуальные тексты
1.3.9 (10.07.2017) Служебное обновление
1.3.8 (29.06.2017) Служебное обновление
1.3.7 (27.06.2017) Служебное обновление Обновлен блок «Акции» Добавлена опция «Отправлять на повторное сжатие файлы с эффективностью сжатия
1.3.6 (26.06.2017) Служебное обновление
1.3.5 (16.06.2017) Служебное обновление
1.3.4 (14.06.2017) Служебное обновление по статистике
1.3.3 (14.06.2017) Добавлен функционал создания шаблонов для обработки изображений, относящихся к инфоблокам
1.3.2 (09.06.2017) Служебное обновление
1.3.1 (31.05.2017) Служебное обновление. Доработаны настройки модуля
1.3.0 (25.05.2017) Оптимизирована индексация
1.2.9 (23.05.2017) Переработана вкладка «Статистика» на странице настроек модуля. Исправлены минорные ошибки в работе модуля
1.2.8 (23.05.2017) Исправлены ошибки при сжатии
1.2.7 (22.05.2017) Добавлено уведомление, если не хватает баланса для сжатия всех картинок в базе
1.2.6 (22.05.2017) Служебное обновление
1.2.5 (18.05.2017) Служебное обновление
1.2.4 (12.05.2017) 1. Добавлена проверка доступности индексируемых файлов на запись 2. Добавлена служебная страница «Таблица индекса» в административной части сайта (в меню «Настройки»)
1.2.3 (28.04.2017) Служебное обновление, по расширениям обрабатываемых файлов
1.2.2 (27.04.2017) Исправлена ошибка индексации
1.2.1 (25.04.2017) 1. Добавлена информация о «Партнерской программе» 2. Добавлен функционал «Удалить оригиналы» 3. Добавлена опция «Индексировать только» 4. Служебное обновление
1.2.0 (22.04.2017) Улучшения работы с API (поддержка редиректов) — важное обновление
1.1.9 (22.04.2017) Улучшена обработка битых изображений
1.1.8 (22.04.2017) — Улучшение интерфейса — Поддержка подмены формата изображений
1.1.7 (21.04.2017) Реализована работа с файлами по символьным ссылкам.
1.1.6 (20.04.2017) Внесены изменения в акции
1.1.5 (17.04.2017) Обновление для случаев, когда отключено сохранение оригиналов
1.1.4 (15.04.2017) Фикс для случаев, когда задан open_basedir.
1.1.3 (13.04.2017) При сжатии картинки пытаемся сохранить владельца файла (для случаев запуска агентов из-под root)
1.1.2 (12.04.2017) Оптимизация работы с API OptiPic.ru
1.1.1 (04.04.2017) Доработка логики установки прав на новые файлы.
1.1.0 (04.04.2017) Доработка логики установки прав на новые файлы.
1.0.10 (22.03.2017) Оптимизация обновления индекса
1.0.9 (22.03.2017) Оптимизация процесса переиндексации
1.0.8 (20.03.2017) Оптимизация переиндексации изображений.
1.0.7 (20.03.2017) Улучшение интерфейса
1.0.6 (20.03.2017) Улучшения интерфейса
1.0.5 (09.03.2017) Изменена система установки
1.0.4 (16.02.2017) Обработка ситуации, когда версия php ниже 5.3.6
1.0.3 (13.02.2017) Не оптимизируем изображения ядра Битрикс
1.0.2 (13.02.2017) Добавлен функционал resize (уменьшение размера изображений). Ресайз срабатывает автоматически, если размеры изображения больше, чем максимальные ширина или высота, заданные в настройках модуля.
1.0.1 (27.01.2017) Обработка ситуации, когда на сервере нет curl.

Ускорение Работы Сайта — Сжатие JPEG изображений

Sait

access_time

15 сентября, 2017

hourglass_empty

3мин. чтения

Введение

Одной из важнейших задач в области оптимизации сайта, которую люди как правило забывают — это работа с изображениями. В одном из наших предыдущих руководств вы узнали, как ускорить работу сайта оптимизируя масштаб изображений. В этом руководстве мы зайдем дальше и научим вас, как получить прогрессивное изображение из последовательного путем сжатия JPEG.

В чем разница между последовательными и прогрессивными JPEG изображениями?

Как правило, JPEG изображения загружаются сверху вниз и поэтому зовутся последовательными. Прогрессивные JPEG наоборот, показывают все изображение, загрузив лишь часть данных. Это означает, что изображение может быть немного пиксельным до его полной загрузки. Ниже вы найдете примеры загрузки для более лучшего понимания.

Цикл загрузки последовательных JPEG:

Цикл загрузки прогрессивных JPEG:

Как прогрессивные JPEG изображения улучшат производительность сайта?

В дополнение к улучшению визуального восприятия, прогрессивные JPEG изображения от 2% до 10% меньше чем последовательные, таким образом, их использование ускорит загрузку и общую производительность вашего сайта. Ваши запросы на сервер будут короткими и более эффективными, что также уменьшит использование ресурсов, таких как пропускная способность и дисковое пространство. Это очень эффективно, если ваш сайт размещен на бесплатном или виртуальном хостинге. Извлечь пользу из сжатия JPEG в прогрессивные могут и сайты с большим количеством таковых. Также стоит упоминания тот факт, что пользователи заходящие на ваш сайт с использованием мобильных устройств или медленным интернет соединением будут иметь лучшее визуальное восприятие и более быстрое время загрузки, если на сайте используются прогрессивные изображения.

ВАЖНО! Некоторые браузеры (например Internet Explorer перед Windows 7) не поддерживали прогрессивные изображения. Однако все более поздние версии их поддерживают.

Что вам понадобится

Перед тем, как вы начнете это руководство, вам понадобится следующее:

Шаг 1 — Анализ вашего сайта

Чтобы найти последовательные JPEG, которые могут быть заменены прогрессивными, мы будем использовать WebPageTest. Это отличный инструмент для этой задачи, так как здесь вы сможете сжать JPEG и получить прогрессивную версию изображения без использования каких-то дополнительных сайтов.

Здесь представлены результаты Performance Review (Обзора производительности) после анализа сайта:

Шаг 2 — Скачивание прогрессивных JPEG изображений

Существует широкий выбор разнообразных инструментов, которые позволят вам получить прогрессивные JPEG из последовательных. Вот некоторые из них:

Вариант 1 — Сжатие JPEG в прогрессивный формат с помощью WebPageTest.org

После поиска списка изображений, которые могут быть заменены, перейдите в раздел Details (Детали) и нажмите View All Images (Просмотреть Все Изображения)

Этот раздел отобразит все изображения на вашей странице. Нажмите Analyze JPEG (Проанализировать JPEG) на каждом из изображений найденном в Шаге 1 этого руководства и прокрутите страницу вниз.

Здесь вы должны найти Quality 85 Image (Качество 85) вашего изначального изображения. Сохраните все Quality 85 изображения на ваш компьютер и приступите к следующему Шагу. Мы рекомендуем сохранять изображения с теми же именами, что и оригинальные, для облегчения процесса замены.

Вариант 2 — Конвертирование последовательных JPEG в прогрессивные с помощью Optimizilla

Если вы только планируете загрузку изображений на ваш сайт или ваш сайт еще не загружен на сервер, вы можете использовать Optimizilla, чтобы произвести процесс сжатия JPEG. Данный инструмент позволяет конвертировать до 20 изображений и сжать их используя алгоритм до Качество 85 или меньше.


ВАЖНО! Выставление значения меньше 85 может привести к потере качества.

Вариант 3 — Оптимизация изображений при помощи CMS плагинов

Если ваш сайт использует WordPress, вы можете легко заменить ваши изображения на прогрессивные JPEG при помощи WP Smush. Проверьте это руководство для более детальных инструкций по использованию WP Smush

Шаг 3 — Замена старых изображений

ВАЖНО! Перед началом убедитесь, что сделали резервную копию вашего сайта или изображений, которые вы планируете заменить.


Найдите изображения из Шага 1 используя Файловый менеджер или любой FTP-клиент. Удалите и замените их новыми прогрессивными JPEG полученными в Шаге 2. Еще раз убедитесь, что они имеют те же имена для избежания ошибок 404 или проблем с отображением.

Шаг 4 — Тестирование изменений

Как только прогрессивные изображения загружены, очистите кэш браузера и откройте ваш сайт для проверки правильности их загрузки. После этого, вы можете проанализировать ваш сайт в WebPageTest.org, чтобы убедиться в правильности проделанных действий. Вот результаты которые вы должны увидеть в разделе Details (Детали):

Заключение

В этом руководстве вы узнали, как ускорить работу вашего сайта путем сжатия JPEG изображений. Чем плавнее визуальное восприятие, тем больше шансов того, что вы и ваши посетители останетесь довольны. Помимо этого, вы сокращаете использование ресурсов, улучшаете SEO и производительность сайта. Это действительно беспроигрышная ситуация для всех.

Руководства по теме:

Системы сжатия изображений JPEG — Исследовательская лаборатория компьютерной инженерии [CERL]

JPEG с потерями

JPEG — это аббревиатура от Joint Photographic Experts Group, а JFIF — это аббревиатура формата обмена файлами JPEG. Обычно файлы с расширением .JPG являются файлами JFIF. Если файл JPEG загружен в текстовый редактор, такой как Блокнот Windows, строка JFIF начинается в первой строке, начиная с 7-го символа. Сжатие JPEG в основном отбрасывает большую часть исходной информации, поэтому точное исходное изображение невозможно восстановить из файла JPEG.Это называется сжатием с потерями. Хотя это звучит плохо, фотография на самом деле содержит значительную информацию, которую человеческий глаз не может обнаружить, поэтому от нее можно безопасно отказаться.

Режимы сжатия JPEG

Стандарт JPEG определяет четыре режима сжатия: иерархическое, прогрессивное, последовательное и без потерь. На рисунке 0 показана взаимосвязь основных режимов сжатия JPEG и процессов кодирования.

Рисунок 0. Режимы работы JPEG

  1. Последовательный: изображения в последовательном режиме кодируются сверху вниз.Последовательный режим поддерживает выборочные данные с точностью 8 и 12 бит. В последовательном формате JPEG каждый компонент цвета полностью кодируется за одно сканирование. В последовательном режиме стандартом JPEG определены два альтернативных процесса энтропийного кодирования: один использует кодирование Хаффмана; другой использует арифметическое кодирование.
  2. Progressive: в изображениях JPEG с прогрессивной разверткой компоненты кодируются при многократном сканировании. Сжатые данные для каждого компонента помещаются от минимум 2 до 896 сканирований.Первоначальное сканирование создает грубую версию изображения, а последующее сканирование уточняет его.
  3. Без потерь: сохраняет точное исходное изображение, малый коэффициент сжатия, меньше использования
  4. Иерархический: JPEG — это суперпрогрессивный режим, в котором изображение разбивается на ряд фрагментов изображения, называемых кадрами. Кадр — это набор из одного или нескольких сканированных изображений. В иерархическом режиме первый кадр создает версию изображения с низким разрешением. Остальные кадры уточняют изображение, увеличивая раствор.(В-1) -1]. Цель этого — гарантировать, что все DCT-коэффициенты будут величинами со знаком с одинаковым динамическим диапазоном. Изображение разбито на блоки размером 8 × 8. Затем каждый блок независимо преобразуется с использованием DCT 8 × 8. Если размеры изображения не кратны 8, блоки на нижней и правой границах могут быть заняты только частично. Эти граничные блоки должны быть дополнены до полного размера блока 8 × 8 и обработаны таким же образом, как и любой другой блок.Компрессор может выбрать значение, используемое для заполнения частичных граничных блоков.

    Цветовое пространство

    Карта VGA отображает цвета, устанавливая интенсивность трех цветов: КРАСНЫЙ, СИНИЙ и ЗЕЛЕНЫЙ. Три цвета образуют ось декартовой системы координат. Тогда любой цвет является точкой в ​​этом цветовом пространстве. Изображение в градациях серого формируется только с использованием точек в цветовом пространстве, где интенсивности КРАСНОГО, СИНЕГО и ЗЕЛЕНОГО цветов равны. Альтернативный набор осей, так называемая яркость и цветность.Ось яркости обозначена Y, синяя ось цветности обозначена U, а красная ось цветности обозначена V. Три новые оси, которые мы создали, образуют три компонента, используемых в файлах изображений JPEG. Следующие формулы преобразуют две системы координат.

     Y = 0,299 R + 0,587 G + 0,114 B
    U = -0,1687 R - 0,3313 G + 0,5 B + 128
    V = 0,5 R - 0,4187 G - 0,0813 B + 128
    
    R = Y + 1.402 (V-128)
    G = Y - 0,34414 (У-128) - 0.71414 (В-128)
    В = Y + 1.772 (U-128)
     

    Существует причина для использования цветового пространства YUV. Человеческий глаз более чувствителен к яркости, чем к цветности. Обычно файлы JPEG выкидывают 3/4 информации о цветности до того, как произойдет какое-либо другое сжатие. Это сокращает объем информации, хранящейся об изображении, на 1/2. Когда все три компонента полностью сохранены, для 4 пикселей требуется 3 x 4 = 12 значений компонентов. Если отбрасываются 3/4 из двух компонентов, нам нужно 1 x 4 + 2 x 1 = 6 значений.
    Наибольшие горизонтальные и вертикальные коэффициенты выборки определяют высоту и ширину минимальной кодированной единицы (MCU) соответственно. Для случая, показанного на рисунке 4, MCU будет иметь два блока 8 × 8 в высоту и два блока 8 × 8 в ширину, всего четыре блока 8 × 8. Блоки сохраняются в файле сначала все Ys, затем все Us, затем все Vs. В этом случае один MCU будет содержать четыре блока Y 8 × 8, за которыми следует один блок U 8 × 8 и один блок V 8 × 8

    .

    Рисунок 1. Трехкомпонентное изображение с субдискретизацией цветности

    Базовая единица данных — блок 8 × 8.Каждая единица данных представляет информацию для одного компонента информации о цвете пикселей. Компонент может быть яркостью (Y), цветностью синего (U) или красным (V).

    Система сжатия изображений JPEG

    Рисунок 2 описывает основные части системы сжатия JPEG. Цветное изображение (которое представлено тремя основными цветными изображениями — красным, зеленым и синим) преобразуется в изображения эквивалентной яркости и цветности (Y, U и V), используя формулу преобразования, как показано в предыдущем разделе.Смещение уровня включено в преобразование цвета. Затем изображения цветности U и V подвергаются субдискретизации с определенным коэффициентом, чтобы уменьшить количество выборок для сохранения скорости передачи битов.

    Рисунок 2. Система сжатия изображений JPEG

    Выходные изображения цветности и яркости разделены на блоки 8 × 8. Каждый блок данных 8 × 8 подвергается дискретному косинусному преобразованию (DCT). Исходный блок данных 8 × 8 и эквивалентный ему блок DCT-коэффициентов показаны на рисунке 3

    .

    Рисунок 3.Исходный блок данных (слева) и эквивалентные коэффициенты DCT (справа)

    Коэффициенты DCT затем квантуются путем разделения на значения квантования, определенные в таблицах квантования яркости и цветности. Значения квантования могут быть установлены индивидуально для каждого коэффициента DCT с использованием критериев, основанных на видимости базовых функций. Квантование по своей природе порождает ошибку. Следовательно, системам отказоустойчивости необходимо различать ошибки квантования и ошибки компьютерного сбоя.Это одна из задач исследовательского проекта.

    Рисунок 4. Таблица квантования яркости (слева) и квантованные коэффициенты DCT (справа)

    На рисунке 4 показана конкретная таблица квантования яркости и квантованные коэффициенты блока DCT, как показано на рисунке 3. Большинство коэффициентов переменного тока уменьшены до нуля, и очень небольшое количество ненулевых значений сосредоточено на низких пространственных частотах (окрестность коэффициента постоянного тока). Чтобы улучшить степень сжатия, квантованный блок переупорядочивается в зигзагообразном порядке, затем применяется метод кодирования длины серии для преобразования последовательности в промежуточные символы. Symbol- 1 содержит информацию (RUNLENGTH, SIZE), а Symbol- 2 содержит информацию (AMPLITUDE)

    Рис. 5. Квантованные коэффициенты в зигзагообразном порядке (вверху) и промежуточные символы из DPCM и кодирования длин серий (внизу)

    На рисунке 5 показаны промежуточные символы, которые необходимо представить для блока данных, показанного на рисунке 3. Коэффициент DC заменяется разностью между коэффициентом DC текущего блока и коэффициентом предыдущего блока.В примере, представленном на рисунке, операция DCT завершается базой компьютера с типом данных фиксированной точки. Быстрый алгоритм DCT включает операции сложения, вычитания и сдвига. Требуется временная память для хранения блока входных данных 8 × 8 и промежуточных результатов. Все они являются причиной компьютерных ошибок. Таким образом, разработка отказоустойчивости для этапа DCT является важной работой в исследовательском проекте. Квантованные коэффициенты DCT являются предметом DPCM и кодирования длины прогона.DPCM используется для вычисления разницы между значением DC текущего блока и значением предыдущего блока. Кодирование длины прогона используется для переупорядочивания коэффициентов переменного тока по зигзагообразной траектории в блоке 8 × 8.

    Дискретное косинусное преобразование

    Идеи сжатия JPEG исходят из инженерного фона. Электрические и звуковые волны можно представить как серию амплитуд во времени. Дискретное косинусное преобразование (DCT) — один из основных строительных блоков JPEG.Дискретное косинусное преобразование было впервые применено к сжатию изображений в новаторской работе Ахмеда, Натараджана и Рао, в которой они показали, что это конкретное преобразование очень близко к преобразованию KLH, преобразованию, которое дает некоррелированные коэффициенты. Другим важным аспектом DCT является возможность квантования коэффициентов DCT с использованием обычно взвешенных значений квантования. Для обнаружения неисправности в сетях DCT была предложена схема одновременного обнаружения ошибок (CED).
    При преобразовании изображения непрерывное тональное изображение может быть представлено серией амплитуд для каждого цветового компонента в двухмерном пространстве.Подобно преобразованию Фурье, дискретное косинусное преобразование используется для отбрасывания высокочастотной информации, которая оказывает небольшое визуальное влияние на изображение. Для представления неподвижного изображения частоты здесь относятся к пространственным частотам, а не к временным частотам.
    Операция DCT в системе сжатия изображений JPEG начинается с блока данных изображения 8 × 8, f (x, y). Этот блок может быть преобразован в новый блок 8 × 8, F (x, y), прямым дискретным косинусным преобразованием (FDCT). Исходный блок f (x, y) может быть получен с помощью обратного дискретного косинусного преобразования (IDCT).Уравнения для дискретных косинусных преобразований:


    Поскольку 2-D DCT является разделимым, суммирование может быть выполнено как восемь 1-D DCT для всех строк, а затем восемь 1-D DCT для восьми столбцов, сформированных коэффициентами для строк. Быстрый алгоритм 8-точечного DCT может быть реализован на рисунке 6. Путь стрелки на графике представляет знак минус в узле. Сам узел представляет собой сложение или вычитание.

    Рис. 6. Блок-схема для 8-точечной DCT адаптирована из Араи, Агуи и Накадзимы.
    a1 = 0: 707; а2 = 0: 541; а3 = 0: 707; а4 = 1: 307; и a5 = 0: 383

    Эта версия DCT имеет 13 умножений и 29 сложений, что составляет конкуренцию лучшим, достигнутым другими методами. Из 13 умножений восемь предназначены для масштабирования конечного результата до правильного диапазона. Если выходные данные должны быть квантованы, они могут быть оставлены в этой масштабированной форме, а коэффициенты масштабирования могут быть включены в деления, необходимые для квантования выходных данных. Наконец, на самом деле перед квантованием необходимо всего 5 умножений, что делает наиболее эффективным 1-мерное квантованное DCT.

    Кодирование Хаффмана

    Коды

    Хаффмана — широко используемый и очень эффективный метод сжатия данных; экономия от 20% до 90% является типичной, в зависимости от характеристик сжимаемых данных. Данные, которые здесь следует учитывать, представляют собой последовательность символов. Жадный алгоритм Хаффмана использует таблицу частот встречаемости символов для построения оптимального способа представления каждого символа в виде двоичной строки. Имеется файл данных длиной 100 000 символов, который необходимо хранить компактно.Предположим, что символы в файле встречаются с частотами, указанными в Таблице 1

    Таблица 1. Частота символов в файле

    б с d e f
    Частота (в тысячах) 45 13 12 16 9 5
    Кодовое слово фиксированной длины 000 001 010 011 100 101
    Кодовое слово переменной длины 0 101 100 111 1101 1100

    Файл данных содержит только символы a-f с указанными частотами.Если каждому символу присвоено трехбитовое кодовое слово, файл может быть закодирован в 300 000 битов. Используя показанный код переменной длины, файл можно закодировать в 224 000 бит, что экономит примерно 25%. Фактически, это оптимальный символьный код для этого файла. После определения символов алфавита эффективность сжатия может быть повышена за счет использования более коротких кодовых слов для более вероятных символов и более длинных кодовых слов для менее вероятных символов. Эти кодовые слова переменной длины принадлежат схеме энтропийного кодирования.Кодирование
    Хаффмана — это один из методов энтропийного кодирования, который JPEG использует в своем стандарте сжатия. Мы видим здесь только коды, в которых кодовое слово не является префиксом другого кодового слова. Такие коды называются префиксными кодами. Можно показать, что оптимальное сжатие данных, достижимое с помощью символьного кода, всегда может быть достигнуто с помощью префиксного кода. Кодирование всегда просто для любого двоичного символьного кода; Кодовые слова, представляющие каждый символ файла, просто объединяются. Например, с префиксным кодом переменной длины из Таблицы 1 3 символа abc кодируются как 0.101.100 = 0101100, где «.» используется для обозначения конкатенации. Процесс декодирования требует удобного представления кода префикса, чтобы можно было легко выбрать исходное кодовое слово.

    Двоичное дерево, листья которого являются заданными символами, обеспечивает одно такое представление. Мы интерпретируем двоичное кодовое слово для символа как путь от корня к этому символу, где 0 означает «перейти к левому дочернему элементу», а 1 означает «перейти к правому дочернему элементу». На рисунке 7 показано дерево кодов фиксированной длины из приведенного выше примера.На каждом листе указан символ и частота его появления. Каждый внутренний узел помечен суммой частот листьев в его поддереве. Оптимальный код для файла всегда представлен полным двоичным деревом, в котором каждый нелистовой узел имеет двух дочерних элементов. Код фиксированной длины, показанный на рисунке 7, не является полным двоичным деревом: есть кодовые слова, начинающиеся с 10…., Но ни одно из них не начинается с 11….

    Рисунок 7. Дерево, соответствующее схеме кода фиксированной длины
    a = 000, b = 001, c = 010, d = 011, e = 100, f = 101

    Если дерево ограничено полным двоичным деревом, то если C — алфавит, из которого взяты символы, то дерево для оптимального префиксного кода имеет точно | C | листьев, по одному на каждую букву алфавита, и ровно | C | -1 внутренние узлы.На рисунке 8 показано полное двоичное дерево, которое реализует оптимальный префиксный код для приведенного выше примера.

    Рисунок 8. Дерево, соответствующее оптимальному коду префикса для данного файла данных
    a = 0, b = 101, c = 100, d = 111, e = 1101, f = 1100

    Имея дерево T , соответствующее префиксному коду, легко вычислить количество битов, необходимых для кодирования файла. Для каждого символа c в C , пусть f ( c ) обозначает частоту c в файле и пусть d ( c ) обозначает глубину листа c . в дереве. d ( c ) также является длиной кодового слова для символа c . Количество бит, необходимых для кодирования файла, составляет

    .

    Проблема с древовидными структурами состоит в том, что они очень чувствительны к ошибкам памяти и не имеют доступной избыточности. Деревья конструируются с использованием указателей для связывания узлов, и каждый узел несет информацию о себе, своем родителе и потомках. Следовательно, если один внутренний узел исчезает в результате ошибки памяти, все его дочерние узлы теряются.Кодирование с использованием кодовых таблиц Хаффмана применяется в стандарте сжатия изображений JPEG. Индексы строки и столбца указывают размер кода, а также нулевую длину серии ненулевых коэффициентов DCT в блоке. Использование кодовой таблицы более подробно описано в проекте отказоустойчивости для кодирования Хаффмана в системах сжатия JPEG.

    Формат сжатых данных JPEG

    На рисунке 8 указан порядок составляющих старших частей формата обмена, который начинается маркером SOI, кадром и заканчивается маркером EOI.Структура кадра начинается с заголовка кадра и должна содержать одно или несколько сканирований. Заголовку кадра может предшествовать один или несколько сегментов спецификации таблицы или одновременных маркеров.

    Рис. 9. Простой формат данных сжатого изображения

    Если присутствует сегмент DLN (определение количества строк), он должен немедленно следовать за первым сканированием. Для процесса на основе DCT каждое сканирование должно содержать от одного до четырех компонентов изображения. Если в сканировании содержится от 2 до 4 компонентов, они должны чередоваться в пределах сканирования.Структура сканирования начинается с заголовка сканирования и содержит один или несколько сегментов данных с энтропийным кодированием. Каждому заголовку сканирования может предшествовать одна или несколько спецификаций таблицы или разные сегменты маркера. Если перезапуск не разрешен, будет только один сегмент с энтропийным кодированием. Если перезапуск разрешен, количество сегментов с энтропийным кодом определяется размером изображения и заданным интервалом перезапуска. В этом случае маркер перезапуска должен следовать за каждым сегментом энтропийного кода, кроме последнего. Чтобы обнаружить ошибку для всего вывода сжатых данных, мы разбиваем его на сегменты

    Файл JPEG состоит из восьми следующих частей:

    1. A Начало изображения SOI
    2. Маркер APP0
      1. APP0 длина
      2. Идентификатор
      3. Версия
      4. Единицы измерения плотности по осям X и Y
      5. X плотность
      6. Y плотность
      7. Эскиз горизонтальных пикселей
      8. Пиксели эскиза по вертикали
      9. Эскиз растрового изображения RGB
    3. Маркер APPn, где n может быть от 1 до 15 (необязательно)
      1. Длина APPn
      2. Информация о приложении
    4. Одна или несколько таблиц квантования DQT
      1. Длина таблицы квантования
      2. Номер таблицы квантования
      3. Таблица квантования
    5. A Начало кадра SOF0
      1. Начало длины кадра
      2. Точность (бит на пиксель на компонент цвета)
      3. Высота изображения
      4. Ширина изображения
      5. Количество цветовых компонентов
      6. Для каждого компонента
        1. ID
        2. Коэффициент вертикальной выборки
        3. Коэффициент горизонтальной выборки
        4. Таблица квантования #
    6. Один или несколько столов Хаффмана DHT
      1. Длина стола Хаффмана
      2. Тип
      3. , переменный или постоянный ток
      4. Индекс
      5. A Таблица битов
      6. A Таблица значений
    7. A Начало сканирования SOS
      1. Длина начала сканирования
      2. Количество цветовых компонентов
      3. Для каждого компонента
        1. ID
        2. Стол переменного тока #
        3. Стол постоянного тока #
      4. Сжатые данные изображения (не включены в длину начала сканирования)
    8. Конец изображения EOI

    Система декомпрессии изображений JPEG

    Система декомпрессии JPEG является обратной по сравнению с системой сжатия JPEG.

    Рис. 10. Структура распаковки JPEG

    Как только кодовые потоки поступают в систему декомпрессии, все полученные таблицы квантования и Хаффмана восстанавливаются. Заголовки кадра также декодируются для определения размера и точности изображения. Сжатый поток для каждого блока 8 × 8 делится на две части. Код DC декодируется с использованием таблиц DC Хаффмана. Выходное значение DC-декодера действительно представляет собой разницу между DC-значением текущего и предыдущих блоков 8 × 8.IDPCM восстанавливает истинное значение DC, добавляя значение, полученное от декодера DC, со значением DC, декодированным из предыдущего блока. Часть AC декодируется с использованием таблиц AC Хаффмана для получения коэффициентов AC, которые организованы в зигзагообразном порядке. Таким образом, на этапе без зигзага коэффициенты преобразовываются в блок 8 × 8. Этап деквантования выполняет умножения между коэффициентами с IDCT выполняет обратное дискретное косинусное преобразование для каждого блока 8 × 8. Поскольку квантование генерирует ошибки квантования, данные восстановленного блока больше не идентичны данным исходного изображения.Данные, полученные на выходе IDCT, формируют изображения цветности и яркости, суммируются со смещением уровня и, наконец, преобразуются в изображение RGB перед отображением на экране.

    Рисунок 11. Преобразование инверсии цвета в декодере

    Схема преобразования инвертирования цвета показана на рисунке 11.

    Процесс декодирования файла JPEG

    На основе формата файла JPEG процессы распаковки для файла JPEG показаны ниже:

    1. Начало изображения SOI
    2. Считывание маркера APP0
    3. Определить таблицу квантования (DQT)
      1. Получите длину таблицы квантования.
      2. Получите номер таблицы квантования.
      3. Получить 64 записи в таблице квантования.
    4. Начало кадра SOF0
      1. Получить начало длины кадра
      2. Убедитесь, что точность составляет 8 бит на пиксель для каждого цветового компонента.
      3. Получить высоту изображения
      4. Получить ширину изображения
      5. Убедитесь, что количество цветовых компонентов равно 3.
      6. Для каждого компонента
        1. Получить идентификатор (игнорируется)
        2. Получить коэффициент вертикальной выборки (младший полубайт)
        3. Получить коэффициент горизонтальной выборки (High Nibble)
        4. Получить таблицу квантования # См. Таблицу квантования выше.
      7. Вычислить делители, используемые для повышения частоты дискретизации компонентов цветности.
        • Например, если оба фактора выборки яркости равны 2, тогда MCU будет иметь 2 × 2 8 × 8 единиц данных или 16 × 16 пикселей, но только значения цветности 8 × 8. В этом случае компоненты цветности в горизонтальном направлении (в первой строке), пиксели 0 и 1 будут использовать первое значение; пиксели 2 и 3 будут использовать второе значение и т. д. Аналогичная ситуация существует в вертикальном направлении.
      8. Рассчитать количество MCU по горизонтали и вертикали на изображении
        • Это число используется для вычисления правого верхнего угла MCU при отображении пикселей.
      9. Пропустите до конца этого раздела, если мы еще не там.
    5. таблица Хаффмана (DHT) процессы
      1. Получите длину таблицы Хаффмана.
      2. Получить тип, AC или DC (1 -> AC)
        • Установить указатель таблицы на таблицу правильного типа, переменного или постоянного тока.
      3. Получить индекс.
        • Это будет использоваться, чтобы определить, какой компонент будет использовать эту таблицу. См. Начало сканирования.
      4. Получите таблицу битов и сложите записи, чтобы определить, сколько записей находится в таблице значений.
      5. Получить таблицу значений.
    6. Начало сканирования SOS
      1. Получить начало длины сканирования.
      2. Получить количество компонентов цвета (предположим, их будет три)
      3. Для каждого компонента
        1. Считать идентификатор и проигнорировать
        2. Получить таблицу переменного тока № (Младший полубайт)
        3. Получить таблицу DC № (High Nibble)
      4. Перейти в конец этого раздела.
      5. Обработать сжатые данные изображения.
    7. Конец изображения EOI

    Руководство по оптимизации JPEG для веб-дизайнеров

    Сжатие изображений присутствует во всех собственных медиаформатах.Однако разница между GIF, PNG и JPEG составляет то, как информация сжимается и отображается на экране.

    В сети опубликовано так много советов по созданию великолепных мультимедийных материалов, но многие дизайнеры до сих пор не понимают некоторых основ.

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

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

    Рекомендуемая литература: Советы и передовые методы веб-оптимизации

    Избегайте экономии при 100%

    Вы почти никогда не должны сохранять изображения JPEG со 100% качеством. Это будет , а не , чтобы получить максимально возможное «оптимизированное» изображение. Фактически он рассчитывается по формуле предела оптимизации, которая непомерно увеличивает размер вашего файла.

    Даже по сравнению с качеством 90% или 95% размер файла значительно уменьшится.

    В большинстве случаев рекомендуется сохранять изображения с качеством намного ниже 90%. Если вы откроете диалоговое окно «Сохранить для Интернета» в Photoshop, вы заметите, что оно предлагает предустановленные значения, из которых вы можете выбирать.

    Я добавил возможные значения JPEG ниже — обратите внимание на присущие соглашения об именах.

    • Низкое — 10%
    • Средний — 30%
    • Высокая — 60%
    • Очень высокий — 80%
    • Максимум — 100%

    Даже в Adobe Photoshop 60% качество изображения считается «высоким».Многие веб-разработчики утверждают, что от 50% до 70% — это безопасный диапазон.

    Насколько низко слишком низко?

    Значения, которые вы выбираете для оптимизации, полностью зависят от текущего проекта. Вам нужно будет подумать, какие типы графики будут выводить файлы наибольшего размера — это те, которые действительно нуждаются в сжатии.

    Я бы сказал, что ниже 30% вы действительно ухудшаете основное качество изображения. Другие дизайнеры будут клясться, что 50% — это «предел» для уменьшения оптимального значения.

    Но лучший совет здесь — просто попробовать разные настройки и посмотреть, что лучше всего выглядит! Вы не ошибетесь, проведя несколько тестовых исследований по оптимизации изображений JPEG для Интернета.

    Варианты сжатия

    Сначала мы должны прояснить два термина «сжатие» и «качество», которые противоположны друг другу.

    Это означает, что если вы сохраните JPEG со сжатием 40%, вы получите качество 60% (по сравнению с максимальным качеством 100% без сжатия).

    Это самые основные параметры для использования — и их должно хватить при сохранении для Интернета.Обычные пользователи не нуждаются в более глубоких настройках.

    Субдискретизация

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

    Яркость или настройка яркости всегда поддерживается на максимально возможном значении при сжатии JPEG. С этим значением яркости на отдельном канале проще оптимизировать отдельные значения цвета для красного и синего.

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

    Ознакомьтесь с этой замечательной записью в блоге о сэмплировании цветности, специально предназначенной для изображений JPEG.

    Интересно отметить, что Adobe Photoshop не всегда использует субдискретизацию для сжатия. Любые изображения, сохраненные через диалоговое окно «Сохранить для Интернета», будут использовать только субдискретизацию цветности ниже значения качества 50%.

    Различные веб-носители

    Интернет также полон различных видов изображений.У вас могут быть фотографии, значки, кнопки, значки и множество другой графики. Но примечательно, что сравнивать качество кнопки и фотографии просто бессмысленно.

    При использовании фотографий или подробных изображений рассмотрите возможность создания ссылки на отдельный файл JPEG с меньшей степенью сжатия. Затем вы можете настроить эскизы на своем сайте с более высокой степенью сжатия и гораздо меньшими размерами файлов.

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

    Использование инструмента сжатия

    Возможно, вы захотите организовать файлы изображений, чтобы их было легко просматривать на вашем сайте. Вы также можете разместить их фотографии в облачном сервисе, таком как Amazon S3, Google Cloud Storage, или через CDN, что ускорит доставку изображения. Тем не менее, вы можете использовать какой-нибудь инструмент сжатия, чтобы уменьшить размер изображения. Любые лишние байты, которые вы можете сократить до размера каждого файла, имеют решающее значение. И вот некоторые из инструментов, которые вы хотите проверить:

    TinyJPG

    TinyJPG — это веб-приложение на основе браузера, в которое вы можете загрузить изображение и все ненужные дополнительные байты для оптимизации размера файла.Это 100% без потерь, что означает, что качество изображения вообще не ухудшится. Вы можете загрузить до 20 изображений размером 5 Мб одновременно.

    Если вы используете WordPress для своего сайта. Вы можете использовать его официальный плагин, Сжатие изображений JPEG и PNG. Этот плагин также подключается к своему дочернему сайту TinyPNG, который позволяет вам оптимизировать изображения в формате PNG.

    IrfanView

    Это бесплатное программное обеспечение для Windows позволяет просматривать и оптимизировать любой набор больших изображений. Мне особенно нравится это программное обеспечение, потому что оно поддерживает пакетное преобразование изображений в нескольких каталогах.Вы можете автоматически применять те же функции к сотням изображений JPEG.

    Что еще лучше, так это поддержка плагинов сторонними разработчиками. Одним из таких примеров является RIOT (инструмент радикальной оптимизации изображений). Этот плагин работает с другими похожими графическими редакторами с открытым исходным кодом, такими как GIMP.

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

    Замечательная поддержка программного обеспечения, а функции RIOT очень просты в использовании.Наряду со сжатием изображений у вас также есть доступ к удалению дополнительных метаданных, таких как EXIF ​​и Adobe XMP. Эти дополнительные биты данных могут только добавить к вашему общему размеру файлов, и они редко нужны.

    ImageOptim для Mac

    Если вы используете OS X и нуждаетесь в мощном приложении для сжатия, не ищите дальше. ImageOptim — мощный инструмент для сжатия изображений для Интернета, иногда даже лучше, чем Photoshop.

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

    6 способов сохранить изображения .WebP как JPG и PNG
    6 способов сохранения изображений .WebP как JPG и PNG

    Проприетарный формат изображений Google WEBP, возможно, лучше, чем стандартный формат JPG или PNG. Он создает … Подробнее

    Заключение

    Несмотря на то, что наши современные скорости интернет-соединения увеличиваются с появлением 4G и грядущего 5G, нам необходимо уменьшить размер наших веб-страниц.Каждый байт в конечном итоге будет стоить вашим пользователям целое состояние, а в некоторых странах эта стоимость может быть весьма значительной.

    В этой статье мы увидели, как сжимать изображения, чтобы уменьшить размер изображения на веб-странице. Раньше сжатие изображения было сложной задачей, так как вам нужно было найти правильный баланс между качеством и содержанием. Также было не так много инструментов на выбор, но теперь параметры стали более продвинутыми и простыми в использовании.

    Если у вас есть похожие приемы или идеи по сжатию JPEG, поделитесь с нами в разделе для обсуждения ниже.

    Быстрое сжатие изображений Jpeg в Linux с терминала

    Маленькая кошка, большой размер файла

    Допустим, вам нужно сжать изображение в формате JPEG в Linux — как вы это делаете?

    Что ж, вы можете достать приложение с графическим интерфейсом, такое как GIMP, и поиграться с настройками.

    Но это требует усилий.

    Итак, в этом посте мы покажем вам инструмент командной строки, который позволяет быстро сжимать изображения jpeg в Linux без каких-либо проблем.

    Если вам не нравится командная строка, попробуйте небольшое приложение для оптимизации изображений «Trimage», которое предоставляет интерфейс с графическим интерфейсом для jpegoptim (и pngcrush).

    Как установить jpegoptim на Ubuntu

    Перво-наперво: давайте настроим инструмент на вашем компьютере с Linux.

    Поскольку jpegoptim — это приложение из командной строки, мы покажем вам, как использовать командную строку для его установки. Это совершенно необязательно; вы также можете установить приложение с помощью Центра программного обеспечения Ubuntu (или аналогичного инструмента управления пакетами).

    Откройте новый сеанс терминала и введите следующую команду, а затем введите свой пароль в соответствии с запросом:

     sudo apt-get install jpegoptim 

    Приложение маленькое, поэтому его установка не займет много времени.Как только он будет готов, он будет готов к использованию.

    Использование Jpegoptim

    Jpegoptim — это небольшая утилита, которая может сжимать и оптимизировать файлы JPEG без значительной потери качества, но с заметной разницей в размере файла.

    Сжатие

    может помочь сэкономить на пропускной способности (при использовании изображений на веб-сайте) и сделать отправку электронных писем немного быстрее (если у вас медленное соединение).

    Использовать инструмент просто.

    Команда по умолчанию оптимизирует ваши jpg-изображения с использованием настроек «максимум / без потерь», чтобы обеспечить наилучшее качество изображения.Чтобы обработать изображение, вы запускаете команду «jpegoptim», после которой указываете местоположение изображения, которое вы хотите сжать.

    Например, у меня есть фотография Cookie размером 1,2 МБ в папке Home . Чтобы сжать его с помощью Jpegoptim, я бы открыл новый сеанс терминала и запустил:

     jpegoptim cookie.jpeg 

    После того, как команда «сделала свое дело» — и имейте в виду, что она перезапишет исходный файл по умолчанию — я могу проверить результат. И, конечно же, файл уменьшен с 1.От 2 МБ до… 1,1 МБ.

    Мелочь, не так ли?

    Но именно здесь мы можем пофантазировать, а Jpegoptim может похвастаться. Приложение также позволяет уменьшить jpg до определенного размера.

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

    Но именно с помощью этой опции мы можем резко уменьшить размер jpeg.

    Чтобы вернуться к нашему примеру, давайте повторно сожмем нашу фотографию Cookie в более удобную для Интернета и возьмем ее из 1.1 МБ до более удобных 100 КБ.

    Мы можем указать размер файла либо в килобайтах (k), либо в процентах (%), и, чтобы запутать ситуацию, нам нужно сообщить приложению, что оно может перезаписать предыдущую попытку сжатия.

      jpegoptim  --size = 100k cookie.jpeg --overwrite 

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

    Результирующее изображение примерно соответствует выбранному мной размеру файла (больше КБ), и в результате его качество упало:

    Теперь давайте возьмем crazy и уменьшим размер изображения до 15 КБ! На этот раз мы также выберем сохранить файл в другом месте, используя флаг « –dest »:

    .
     jpegoptim --size = 15k cookie.jpg --dest ~ / Рабочий стол 

    Результат:

    Другие функции

    Также можно оптимизировать сразу несколько изображений, просто перечислив их:

      jpegoptim  kittens.jpeg cats.jpg feline_good.jpg 

    Требуется пакетная обработка всей папки jpeg-файлов? Jpegoptim справится и с этим:

      jpegoptim  ~ / Картинки / CatPhotos / *. Jpeg 

    Чтобы увидеть полный список опций и инструкции по использованию этой утилиты, см. Справочную страницу Ubuntu, запустив:

      человек  jpegoptim 

    У вас есть любимая утилита командной строки? Сообщите нам об этом в комментариях ниже или отправив нам совет!

    Home »Как сделать» Быстрое сжатие изображений Jpeg в Linux из терминала

    Исследование сжатия

    WebP | Разработчики Google

    Введение

    Мы проводим сравнительную оценку сжатия изображений WebP и JPEG на основе новый кодировщик, который мы выпустили в libwebp .Цель состоит в том, чтобы запустить набор легко повторить эксперименты с использованием общедоступных инструментов и сравнить сжатие изображений достигается с помощью WebP и JPEG.

    Наше более раннее сравнительное исследование WebP было сосредоточено на оценка большого количества изображений проводилась на источниках JPEG, которые были просканированы из Интернета. JPEG является форматом сжатия с потерями и вводит артефакты сжатия в источник. Кроме того, изначально мы использовали Peak Соотношение сигнал / шум или ПСНР как качество метрическая. PSNR имеет некоторые недостатки при использовании в качестве показатель качества изображений.На основе отзывов сообщества мы проводим эксперименты с изображениями PNG, включая изображения, доступные в нескольких стандартных тестах апартаменты. В этом исследовании мы используем структурное сходство или SSIM как показатель качества для этого исследования. SSIM считается лучшим визуальным качеством метрическая .

    Методика

    Мы описываем два типа оценок. В первом случае исследуем дополнительное сжатие, достигаемое WebP на том же уровне качества JPEG. В в частности, мы генерируем изображения WebP того же качества (согласно индексу SSIM), что и Изображения JPEG, а затем сравните размеры файлов изображений WebP и JPEG.в Во втором случае мы анализируем графики зависимости SSIM от бит на пиксель (bpp) для WebP и JPEG. Эти графики показывают соотношение скорость-искажение для WebP и JPEG.

    Наборы данных для экспериментов состоят из изображений PNG. Эти изображения были полученные из общедоступных стандартных наборов тестовых изображений, а также большая коллекция изображений PNG, сканированных из Интернета.

    Каждый эксперимент состоит из выполнения набора команд. Только общедоступный инструменты командной строки используются для сохранения воспроизводимости экспериментов. для других.В этом эксперименте используются следующие инструменты командной строки:

    • идентифицируйте и convert — это инструменты командной строки, которые являются частью ImageMagick. Мы использовали версию 6.5.7 для этот анализ. Мы использовали convert для преобразования между форматами PNG и PPM. Мы использовали , идентификатор , чтобы извлечь информацию о ширине и высоте изображение.

    • cwebp и dwebp инструменты командной строки, которые являются частью библиотеки libwebp , которую мы выпущен в первом квартале 2011 года.Мы использовали версию 0.1.2 библиотеки. Мы использовали cwebp и dwebp для кодирования и декодирования изображений WebP. Мы использовали параметры кодирования и декодирования этих инструментов по умолчанию.

    • cjpeg и djpeg — это инструменты командной строки, которые являются частью libjpeg библиотека. Мы использовали версию 6b библиотеки. Мы использовали cjpeg и djpeg для кодировать и декодировать изображения JPEG. Мы использовали cjpeg с флагом -optimize , чтобы оптимизировать под размер файла.Все остальные параметры устанавливаем по умолчанию. значения.

    Качество изображения измерялось с помощью SSIM. Как отмечалось ранее, SSIM — это общепринято как показатель лучшего качества, чем PSNR. Для индекса SSIM вычисления, мы использовали общедоступная реализация на C ++. Читатель может скачать Скрипты Python мы использовали в экспериментах из репозитория кода для справки.

    Наборы данных изображений

    Мы выбрали наборы данных для оценки стандартных коллекций тестовых изображений, а также на большом наборе изображений.Ниже приводится список наборов данных, используемых в эксперименты.

    1. Lenna: широко используемое изображение Lenna (512 х 512 пикселей).

    2. Kodak: 24 изображения из Набор изображений Kodak с истинными цветными изображениями.

    3. Tecnick: 100 изображений из коллекции доступны по адресу Tecnick.com. Мы использовали 100 цветных изображений RGB исходного размера.

    4. Image_crawl: Чтобы протестировать большое количество изображений, мы собрали случайный образец изображений PNG из базы данных сканирования Google Картинок.Большинство просканированные изображения PNG — это значки, графика, диаграммы, отсканированные документы, и т.д. Однако большинство изображений в стандартных тестовых коллекциях похожи на фотографии, а не изображения, созданные на компьютере. Чтобы сделать этот набор данных По сути, аналогично стандартным тестовым пакетам, мы запустили функцию распознавания лиц. алгоритм для этих изображений PNG и рассматривал только эти изображения (около 11000) для этого эксперимента, прошедшего этот тест на обнаружение.

    Эксперимент 1: WebP против JPEG при равном индексе SSIM

    В этом эксперименте мы генерируем изображения JPEG и WebP с сопоставимыми значениями SSIM. и измерить соотношение размеров файлов.Шаги эксперимента следующие: следует:

    1. Сжать исходное изображение PNG в JPEG с фиксированным параметром качества Q и запишите SSIM между исходным изображением PNG и сжатым JPEG изображение.

    2. Сжать то же исходное изображение в WebP с параметром качества, который максимально приближается к указанному выше SSIM.

    Мы выполнили два вышеуказанных шага на всех изображениях в наборе данных, а затем измерили средний размер файла и SSIM для изображений JPEG и WebP.

    В следующих таблицах показаны результаты этого эксперимента для трех различных значения (50, 75 и 95) параметра качества JPEG Q. Параметры качества 50 и 95 представляют сжатие изображения при низкой и высокой скорости передачи данных соответственно. Мы также включили параметр качества JPEG 75, поскольку он обычно рекомендовать уровень качества для изображений JPEG.

    Таблица 1: Средний размер файла для WebP и JPEG для одного и того же индекса SSIM соответствует JPEG Q = 50

    Ленна Kodak Tecnik Image_crawl
    WebP: средний размер файла
    (средний SSIM)
    17.4 КБ
    (0,841)
    31,0 КБ
    (0,898)
    92,4 КБ
    (0,917)
    6,5 КБ
    (0,901)
    JPEG: средний размер файла
    (средний SSIM)
    23,5 КБ
    (0,840)
    42,7 КБ
    (0,897)
    124,6 КБ
    (0,916)
    9,9 КБ
    (0,899)
    Соотношение размера файла WebP и JPEG 0,74 0,72 0,74 0,66

    Таблица 2: Средний размер файла для WebP и JPEG для одного и того же индекса SSIM соответствует JPEG Q = 75

    Ленна Kodak Tecnik Image_crawl
    WebP: средний размер файла
    (средний SSIM)
    26.7 КБ
    (0,864)
    46,5 КБ
    (0,932)
    139,0 КБ
    (0,939)
    9,9 КБ
    (0,930)
    JPEG: средний размер файла
    (средний SSIM)
    37,0 КБ
    (0,863)
    66,0 КБ
    (0,931)
    191,0 КБ
    (0,938)
    14,4 КБ
    (0,929)
    Соотношение размера файла WebP и JPEG 0,72 0,70 0,73 0,69

    Таблица 3: Средний размер файла для WebP и JPEG для того же индекса SSIM соответствует JPEG Q = 95

    Ленна Kodak Tecnik Image_crawl
    WebP: средний размер файла
    (средний SSIM)
    74.3 КБ
    (0,910)
    118,0 КБ
    (0,978)
    356,0 КБ
    (0,970)
    23,4 КБ
    (0,969)
    JPEG: средний размер файла
    (средний SSIM)
    104 КБ
    (0,907)
    162 КБ
    (0,976)
    492 КБ
    (0,970)
    31,3 КБ
    (0,968)
    Соотношение размера файла WebP и JPEG 0,71 0,73 0,72 0,75

    Из приведенных выше таблиц мы видим, что WebP дает дополнительные 25% -34% выигрыш от сжатия по сравнению с JPEG при равном или немного лучшем индексе SSIM.

    Эксперимент 2: графики SSIM и BPP для WebP и JPEG

    Мы изучаем компромисс между скоростью и искажением JPEG и WebP. В частности, мы изучите графики зависимости SSIM от бит на пиксель (bpp) для JPEG и WebP. Мы берем исходное изображение PNG, сжать его в JPEG и WebP, используя все возможные (0-100) ценности качества. Затем для каждого значения качества мы наносим на график достигнутые SSIM и bpp. для JPEG и WebP. На следующих рисунках показаны такие графики зависимости SSIM от bpp для 3 изображения, выбранные из 3-х открытых наборов данных, которые мы использовали.

    Рисунок 1. Сравнение SSIM и BPP для Lenna

    Рисунок 2: SSIM и BPP для kodim19.png из набора данных Kodak

    Рисунок 3: SSIM против BPP для RGB_OR_1200x1200_061.png от Tecnick набор данных

    Кроме того, мы изучили среднее поведение графика SSIM и bpp для Наборы данных Kodak и Tecnick. Чтобы построить среднее поведение, мы сжимаем все изображения в наборе данных с использованием WebP и JPEG со 100 различными значениями качества.Мы затем постройте среднее значение SSIM и bpp для каждого значения качества. Сканирование изображений набор данных состоит из разнородных изображений, которые не поддаются этому агрегирование данных. Следующие графики показывают среднее поведение SSIM и bpp для наборов данных Kodak и Tecnick соответственно.

    Рисунок 4. Сравнение SSIM и BPP для набора данных Kodak

    Рисунок 5. Сравнение SSIM и BPP для набора данных Tecnick

    В целом, из приведенных выше графиков мы видим, что WebP постоянно требует меньше бит на пиксель, чем JPEG, для достижения того же индекса SSIM.

    Заключение

    В исследовании сравнивалось сжатие WebP с JPEG. Мы заметили, что средний размер файла WebP на 25% -34% меньше по сравнению с размером файла JPEG при эквивалентный индекс SSIM. Графики SSIM и bpp показали, что WebP последовательно требуется меньше битов на пиксель, чем JPEG для того же индекса SSIM. Эти результаты указывают на то, что WebP может обеспечить значительные улучшения сжатия по сравнению с JPEG.


    1 Huynh-Thu, Q .; Ганбари, М. (2008). «Сфера действия PSNR в оценка качества изображения / видео ».Письма об электронике 44: 800-801.doi: 10.1049 / el: 20080522.

    2 З. Ван, А. К. Бовик, Х. Р. Шейх и Э. П. Симончелли, «Оценка качества изображения: от измерения погрешности до структурного сходства», Обработка изображений, IEEE Transactions, Volume 13, Issue 4, pp. 600-612, 2004.

    ЗА и ПРОТИВ сжатия изображений JPEG

    Формат JPEG — один из наиболее часто используемых форматов для хранения изображений и фотографий.JPEG — это аббревиатура от Joint Photographic Expert Group. Существует две основные категории формата JPEG, одна из которых используется цифровыми камерами для захвата и хранения фотографий и называется форматом Exif. Другая категория формата JPEG — это формат JPEG / JFIF, который в основном используется для передачи и хранения изображений. В этой статье мы подробно рассмотрим методы сжатия изображений JPEG.

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

    История JPEG

    JPEG назван в честь профессиональной группы, которая его разработала, Joint Photographic Expert Group . Группа установила стандарт в 1986 году. Первыми его использовали фотографы. Но поскольку люди создали Интернет и связанные с ним технологии, другим потребовались также файлы изображений меньшего размера.Эти люди начали применять стандарт JPG за пределами фотографии. Сегодня люди используют JPEG во всем, от создания деловых документов до взаимодействия в социальных сетях.

    Основные категории JPEG

    Насколько можно сжать JPEG? Есть две основные категории сжатия изображений JPEG.

    • JPEG / Exif (формат файла с возможностью обмена) –Используется цифровыми камерами для захвата и хранения изображений
    • JPEG / JFIF (формат обмена файлами JPEG) –используется для передачи и хранения изображений, особенно через Интернет

    Многие люди не различают и два типа JPEG .Они будут ссылаться как на JPEG / Exif, так и на JPEG / JFIF просто как JPEG.

    Преимущества формата изображения JPEG

    Есть несколько преимуществ формата изображения JPEG:

    • Формат JPEG используется в течение длительного времени и чрезвычайно портативен ;
    • Формат JPEG совместим почти со всеми приложениями обработки изображений ;
    • Формат JPEG совместим с большинством аппаратных устройств , например, с принтерами и т. Д. — поэтому очень легко распечатать изображения в формате JPEG;
    • Формат
    • JPEG можно использовать для хранения быстро движущихся изображений с высоким разрешением , которые были бы размытыми в других форматах изображений, потому что из-за их небольшого размера изображения JPEG можно быстро сохранить с камеры на устройство хранения;
    • Размер изображений JPEG может быть уменьшен и сжат , что делает этот формат файла подходящим для передачи изображений через Интернет, поскольку он потребляет меньшую полосу пропускания.Изображение JPEG можно сжать до 5% от исходного размера.

    У JPEG множество преимуществ и недостатков; тем не менее, у этих изображений есть определенные недостатки JPG и недостатки, которые вызывают серьезную озабоченность фотографов и компьютерных ученых, которыми нельзя пренебрегать.

    Конвертировать JPEG в PDF онлайн

    Чаще всего вам необходимо преобразовать JPEG в формат PDF. Например, когда вы получаете контракты, формы или соглашения в виде изображения, их легче преобразовать.Формат PDF более гибкий и может быть интегрирован.

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

    PDF.co позволяет конвертировать JPEG в PDF за 3 простых шага:

    1. Вы выбираете изображение, которое нужно преобразовать;
    2. Взять можно с компьютера , Dropbox, URL ;
    3. Вы добавляете изображения, если необходимо ;
    4. Вы нажимаете «Продолжить» и готовите свой PDF-файл.

    Методы сжатия JPEG

    Сжатие JPG манипулирует тем фактом, что глаз более чувствителен к яркости, чем к цвету. Он устраняет цвета на самых высоких частотах. Вы все равно не можете их увидеть, поэтому не упустите их. Возможно, вы даже не сможете выбрать изображение в формате JPEG при сравнении.

    Понимая эту концепцию, вы можете создать изображение JPEG с помощью нескольких методов сжатия JPEG. Таким образом, шаги сжатия JPG могут быть разными.Но в тройку самых популярных техник входят

    • Понижение частоты дискретизации каналов цветности (настройка различий красного и синего цветов)
    • Квантование дискретного косинусного преобразования
    • Энтропийное кодирование

    Каждый из этих методов включает создание матриц с помощью алгоритмов сжатия изображений . Но только энтропийное кодирование является сжатием JPEG без потерь.

    Почему необходимо сжатие JPEG

    Насколько можно сжать JPG?

    Если вы уменьшите размер файла изображения по стандарту JPEG, файл не займет много места.Фактически, JPEG позволяет сжать размер файла изображения до 5 процентов от его исходного размера. Это означает, что вы можете хранить больше файлов в своем хранилище. Это важно для любого технического пользователя. Но это особенно удобно для веб-мастеров или дизайнеров, чтобы сжать файл изображения онлайн или офлайн. Если они сжимают фотографии для Интернета, они могут создавать сайты, на которых будет больше изображений и которые будут удобнее просматривать. Это сильно влияет на посещаемость сайта. Если веб-хостинг передает данные медленно, сжатие может помочь вам увидеть полную страницу веб-сайта и быстрее с ней взаимодействовать.

    Кроме того, некоторые устройства создают узкие места. Они могут нормально читать данные. Но они настроены на более медленное чтение информации. Если вы уменьшите размер файла фотографии, более медленное устройство сможет загружать изображение быстрее.

    С учетом вышеизложенного, сжатие изображений JPEG может оказаться полезным в таких ситуациях, как

    • Отправка фотографии другу по электронной почте
    • Отправка графического документа коллеге во время вебинара
    • Создание файла PDF
    • Размещение статьи в блоге
    • Просмотр веб-сайта на старом ноутбуке, смартфоне или ноутбуке

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

    Недостатки сжатия изображений JPEG

    • Метод сжатия JPEG — это сжатие с потерями . Сжатие с потерями означает, что после сжатия изображения в формате JPEG оно теряет определенное фактическое содержимое изображения;
    • Качество изображения снижается после сжатия JPEG из-за потери фактического содержимого изображения.
      Сжатие изображений JPEG не подходит для изображений с резкими краями и линиями. Формат изображения JPEG не поддерживает работу с анимированными графическими изображениями;
    • Изображения JPEG не поддерживают многослойные изображения. Графическому дизайнеру необходимо работать с многослойными изображениями, чтобы манипулировать и редактировать графические изображения , что невозможно с изображениями JPEG;
    • Только 8-битные изображения поддерживаются форматом JPEG . С другой стороны, современные цифровые камеры с высоким разрешением поддерживают 10, 12, 14 или 16-битные изображения.Если эти изображения хранятся в формате JPEG, лишняя информация отбрасывается, что приводит к снижению качества изображения.

    Сжатие JPEG для штрих-кодов и изображений лиц

    Как обсуждалось, сжатие JPEG приводит к потере данных . Сжатие JPEG не должно использоваться для хранения штрих-кодов . Хранение штрих-кодов в формате JPEG может привести к искажению рисунков штрих-кода и может добавить шум к изображению штрих-кода, что очень затрудняет декодирование сканерами штрих-кода фактического содержимого штрих-кода.Точно так же сжатие JPEG не подходит для хранения лицевых . Программное обеспечение для распознавания лиц может затруднить распознавание изображений лиц, сжатых с помощью метода сжатия JPEG .

    Как сжимать JPEG для Интернета и других проектов

    Вы можете использовать программу сжатия JPEG для сжатия файла изображения в автономном режиме. Но есть много интернет-инструментов для бесплатного сжатия файлов JPEG в Интернете. Если вы работаете в автономном режиме, вы обычно просто выбираете изображение.Затем выберите степень сжатия изображения, например 75 процентов. (Значение по умолчанию — 65 процентов, так как при этом удаляется приличный объем данных, не жертвуя слишком большим качеством.) Некоторые инструменты позволяют вам выбирать параметры, которые также оптимизируют сжатие для различных целей. Например, вы можете сжать изображения для веб-страниц. В качестве альтернативы вы можете сжать для сообщения электронной почты. У вас также может быть возможность сжать несколько изображений одновременно.

    Лучшие инструменты сжатия JPEG предоставят вам информацию о новом файле JPEG.Например, инструмент может оценить, насколько маленьким будет новый файл. Это также может позволить вам узнать размеры в пикселях или позволить вам заранее увидеть эффекты сжатия. Итак, вы можете понять, подойдет ли вам файл.

    Конвертировать JPG в PDF онлайн

    Заключение

    Из вышеупомянутых фактов можно сделать вывод, что изображения JPEG следует использовать только в том случае, если вам нужны небольшие портативные изображения с гладкими краями и цветовым контрастом, независимо от качества изображения; однако, если вы хотите редактируемое изображение высокого разрешения с резким контрастом , использование изображения JPEG не является хорошим выбором, и следует рассмотреть другие форматы изображений, такие как PNG, и GIF, которые основаны на алгоритмах сжатия без потерь.

    Об авторе

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

    Unraveling Изображения JPEG

    JPEG повсюду в нашей цифровой жизни, но за пеленой привычки скрываются алгоритмы, удаляющие детали, невидимые человеческому глазу.Это обеспечивает высочайшее качество изображения при наименьшем размере файла — но как это выглядит? Посмотрим, чего не видят наши глаза!

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

    Чтобы решить эту проблему, Объединенная группа экспертов по фотографии (JPEG), комитет экспертов со всего мира, была создана в 1986 году совместными усилиями Международной организации по стандартизации (ISO) и Международной электротехнической комиссии (IEC). ) — две международные организации по стандартизации со штаб-квартирой в Женеве, Швейцария.

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

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

    Играть с изображениями таким способом — просто весело.



    Пиринг внутри JPEG

    Все на компьютере хранится в виде последовательности двоичных чисел. Обычно эти биты, нули и единицы, расположены в группах по восемь штук, известных как байты.Когда вы открываете изображение JPEG на своем компьютере, что-то (браузер, ваша операционная система или что-то еще) должно декодировать байты, чтобы восстановить исходное изображение в виде списка цветов, который затем может быть отображен.

    Если вы загрузите это изображение кота и откроете его с помощью любого текстового редактора, вы увидите кучу искаженных символов.
    Здесь я использую Notepad ++ для просмотра файла изображения, поскольку обычные текстовые редакторы, такие как Блокнот Windows, изменят двоичное содержимое файла при его сохранении, так что он больше не является допустимым форматом JPEG.

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

    Эти пятна, которые вы видите, известные как фосфены, не возникают из-за каких-либо световых раздражителей, и они не являются галлюцинациями, созданными в вашем уме. Они возникают потому, что ваш мозг предполагает, что любой электрический сигнал, проходящий через нервы в вашем глазу, передает световую информацию. Мозгу необходимо сделать это предположение, потому что невозможно узнать, является ли данный сигнал звуком, зрением или чем-то еще.Все нервы в вашем теле переносят точно такой же тип электрического импульса. Когда вы оказываете давление, потирая глаза, вы посылаете невизуальные сигналы, которые запускают рецепторы в вашем глазу, которые ваш мозг интерпретирует — в данном случае неправильно — как зрение. Вы буквально можете увидеть давление!

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

    Чтобы понять, как декодируется изображение JPEG, нам нужно увидеть сами исходные сигналы — двоичные данные. Это можно сделать с помощью шестнадцатеричного редактора

    . Вам необязательно нужен шестнадцатеричный редактор .Вы можете редактировать символы как текст, сохранять файл и снова открывать его как изображение. Но поскольку наша цель — понять, как JPEG хранит изображения, полезно иметь возможность читать байты!

    , или это можно сделать прямо здесь, на этой странице! Ниже показано изображение рядом со всеми его байтами

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

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

    Совет: попробуйте прокрутить вниз и удалить несколько фрагментов. Не волнуйтесь, вы всегда можете восстановить исходное изображение!

    Вы можете многому научиться, просто играя с этим редактором. Например, можете ли вы определить порядок, в котором хранятся пиксели?

    Что-то странное в приведенном выше примере заключается в том, что изменение некоторых чисел, похоже, вообще не влияет на изображение, тогда как установка 17 в первой строке на 0 полностью портит изображение! Другие действия, такие как установка 7 в строке 1988 на 254, изменяют цвет, но только для последующих пикселей.


    Больше от параметрического пресса


    Пожалуй, самое странное, что некоторые числа меняют не только цвет, но и форму изображения. Измените 70 в строке 12 на 2 и посмотрите на верхнюю строку изображения, чтобы понять, что я имею в виду. Независимо от того, какое изображение JPEG вы используете, вы всегда найдете эти загадочные узоры в виде шахматной доски при редактировании байтов.

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

    Три уровня сжатия JPEG

    1. Субдискретизация цветности
    2. Дискретное косинусное преобразование и квантование
    3. Длина прогона, дельта-кодирование и кодирование Хаффмана

    Чтобы дать вам представление о масштабе этого сжатия, обратите внимание, что изображение выше представлено ровно 79 819 чисел, что составляет около 79 килобайт. Если бы он был сохранен без сжатия, для каждого пикселя потребовалось бы три числа — по одному для каждого из красного, зеленого и синего компонентов.Это будет означать в общей сложности 917 700 номеров или около 917 килобайт. При сжатии JPEG результирующий файл будет более чем в десять раз меньше !

    Фактически, этот образ можно сжать до гораздо меньшего количества байтов. Ниже приведено изображение рядом с его версией, которая была сжата до 16 килобайт, что делает его в пятьдесят семь раз меньше , чем была бы несжатая версия!

    Если вы присмотритесь, то увидите, что эти изображения не идентичны. Оба изображения закодированы в формате JPEG, но изображение справа намного меньше по размеру файла.Он также выглядит не так красиво (обратите внимание, как блочно цвета выглядят на заднем плане). Вот почему JPEG известен как метод сжатия с потерями ; изображение изменяется и теряет некоторые детали в результате сжатия.

    1. Субдискретизация цветности

    Вот изображение с примененным только первым слоем сжатия.

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

    Теперь расшифровать немного проще. Это почти простой список цветов, в котором каждый байт изменяет ровно один пиксель, но при этом он уже почти в два раза меньше несжатого изображения (что составляет около 300 КБ для этого меньшего размера). Вы можете догадаться, почему?

    Вы можете сказать, что эти числа не представляют стандартные красные, зеленые и синие компоненты, потому что замена всех чисел на 0 делает изображение зеленым (в отличие от черного).

    Это потому, что эти байты представляют Y (яркость), Cb (относительную голубизну) и Cr (относительную красноту) изображения.

    Почему бы просто не использовать RGB? В конце концов, именно так работают большинство современных экранов. Ваш монитор может отображать любой цвет, включая красный, зеленый и синий свет с различной интенсивностью для каждого пикселя. Белый цвет отображается при включении всех трех цветов на полную яркость, а черный отображается при их отключении.


    Это тоже очень похоже на то, как работают человеческие глаза. Цветовые рецепторы в наших глазах, известные как «колбочки», делятся на три типа, каждый из которых наиболее чувствителен к красному, зеленому или синему цвету.Палочки, другой тип рецепторов наших глаз, могут обнаруживать только изменения яркости, но они гораздо более чувствительны. У нас в глазах около ста двадцати миллионов палочек по сравнению с жалкими шестью миллионами колбочек.

    Это означает, что наши глаза гораздо лучше обнаруживают изменения яркости, чем изменения цвета. Если мы сможем отделить цвет от яркости, мы сможем удалить немного цвета, чтобы никто не заметил. Подвыборка цветности — это процесс представления цветовых компонентов изображения с более низким разрешением, чем его компоненты яркости.В приведенном выше примере каждый пиксель имеет ровно один компонент Y, в то время как каждая дискретная группа из четырех пикселей имеет ровно один компонент Cb и один компонент Cr. Таким образом, изображение содержит только четверть цветовой информации, чем было изначально.

    Использование цветового пространства YCbCr не является уникальным для JPEG. Фактически, он был первоначально разработан в 1938 году для телевещания. Не у всех были цветные телевизоры, поэтому отделение цвета от яркости позволяло всем получать одинаковую передачу, а телевизоры, не поддерживающие цвет, просто использовали бы компонент яркости.

    Вот почему удаление одного числа из приведенного выше редактора полностью портит цвет. Здесь хранятся компоненты.

    Как правило, изображения в формате JPEG не нуждаются в хранении компонентов в каком-либо конкретном порядке. Они могут чередоваться, как в этом примере, или могут быть сохранены все компоненты Y изображения, за которыми следуют все Cb и т. Д. Заголовок JPEG — это то, что сообщает нам, как хранятся компоненты.

    как Y Y Y Y Cb Cr . Удаление первого числа приводит к тому, что значение Cb интерпретируется как Y, а Cr как Cb, и создает эффект пульсации, который переворачивает все цвета на изображении.

    В спецификации JPEG нет ничего, что говорило бы, что вы должны использовать YCbCr. Большинство изображений JPEG, которые вы найдете, используют его, потому что после субдискретизации он дает изображения более высокого качества по сравнению с RGB. Однако не стоит принимать это как должное. Вы можете сами увидеть в таблице ниже, как выглядит субдискретизация каждого компонента индивидуально по RGB, а также YCbCr.

    Подвыборка в процентах: 15%
    Переместите ползунок, чтобы отрегулировать количество применяемой подвыборки.

    Удаление синего не так заметно, как удаление красного или зеленого.Это из-за шести миллионов колбочек в ваших глазах, около 64% ​​наиболее чувствительны к красному, 32% — к зеленому и только 2% — к синему.

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

    Преобразование изображения из RGB в YCbCr не уменьшает размер файла, но упрощает поиск менее заметных деталей для удаления.Это второй этап, на котором происходит фактическое сжатие с потерями. Идея поиска новых способов представления данных, чтобы сделать их более сжимаемыми, лежит в основе того, что делает следующий слой.

    2. Дискретное косинусное преобразование и квантование

    Этот уровень сжатия в значительной степени является определяющей особенностью JPEG. После преобразования цветов в YCbCr компоненты сжимаются по отдельности, поэтому мы можем сосредоточиться только на компоненте Y до конца статьи. Вот как выглядят байты для компонента Y после применения этого слоя.

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

    На первый взгляд кажется, что это очень плохое сжатие. На этом изображении 100 000 пикселей, и все же для представления яркости каждого пикселя требуется 102 400 чисел — это хуже, чем его вообще не сжимать!

    Но обратите внимание, что большинство из этих значений равны 0.Фактически, все эти завершающие нули можно удалить без изменения изображения. Остается всего около 26 000 номеров, что делает его примерно в четыре раза меньше!

    В этом слое кроется секрет узоров шахматной доски. В отличие от других эффектов, которые мы видели, появление этих паттернов не является ошибкой. Фактически, они являются строительными блоками всего изображения. Каждая строка в редакторе выше содержит ровно 64 числа, известных как коэффициенты дискретного косинусного преобразования (DCT), которые соответствуют интенсивности 64 уникальных паттернов.

    Эти паттерны образованы косинусоидальными волнами. Вот как выглядят некоторые из них:

    Это 8 из 64 коэффициентов дискретного косинусного преобразования. Предоставлено: Джез Суонсон.

    Ниже приведено изображение, на котором показаны все 64 из них по отдельности.

    Эти узоры особенные, потому что они составляют основу изображений 8×8. Если вы не знакомы с линейной алгеброй, это означает, что любое изображение 8×8, все, что вы можете вообразить, может быть создано из этих 64-х конкретных шаблонов.Дискретное косинусное преобразование — это процесс разбиения изображения на блоки 8×8 и преобразования каждого блока в комбинацию этих 64 коэффициентов. Вот как вы могли бы сформировать круг, комбинируя эти узоры, или морду кошки. Вы можете нажать здесь, чтобы вернуться к сетке из 64 узоров.

    Кажется волшебством сказать, что любое изображение может быть представлено с помощью 64 определенных шаблонов. Но это то же самое, что сказать, что любое место на Земле может быть представлено только двумя числами: долготой и широтой.Мы часто рассматриваем поверхность Земли как двумерную, поэтому нам нужны только два числа. Изображение 8×8 является шестидесяти четырехмерным, поэтому нам нужно шестьдесят четыре числа.

    Что касается сжатия, не ясно, как это нам помогает. Если нам нужно шестьдесят четыре числа для представления изображения 8×8, почему это лучше, чем сохранение шестидесяти четырех компонентов яркости? Мы делаем это по той же причине, по которой преобразовали три числа RGB в три числа YCbCr: это позволяет нам удалить менее заметные детали.

    Трудно увидеть, как именно выглядят детали, удаляемые на этом этапе сжатия, потому что JPEG применяет дискретное косинусное преобразование только к блокам размером 8×8 пикселей за раз. Однако нет причин, по которым мы не можем применить его ко всему изображению. Вот как выглядит применение DCT к компоненту Y всего изображения:

    Мы можем удалить более 60 000 чисел с конца почти без заметных изменений. Но обратите внимание, что если мы установим только первые пять чисел на ноль (игнорируя первое, потому что оно просто делает изображение темнее), уже будет очевидная разница.


    Получайте обновления с параметрического пресса


    Цифры в начале представляют более низкие частотные изменения в изображении, которые наши глаза лучше распознают. Цифры в конце представляют более частые изменения, которые нам труднее увидеть, поэтому мы не замечаем, когда они исчезают. Чтобы увидеть «то, что не видят наши глаза», мы можем выделить эти высокочастотные детали, установив первые 5000 чисел равными нулю.

    Здесь вы видите все области изображения, которые больше всего изменяются от одного пикселя к другому.Выделяются кошачьи глаза, усы, пушистое одеяло и тени в нижнем левом углу. Это можно сделать даже дальше, установив первые 10 000 чисел на ноль; 20,000; 40 000 или 60 000.

    Эти высокочастотные детали — это то, что JPEG удаляет на этом этапе сжатия. Преобразование цветов в коэффициенты DCT не является операцией с потерями. Это этап квантования с потерями, когда удаляются значения с высокой частотой, близкие к нулю или и то, и другое. Когда вы выбираете параметр более низкого качества при создании изображения JPEG, он увеличивает порог того, сколько из этих значений удаляется, что приводит к меньшему размеру файла, но к более блочному изображению.Поэтому вариант изображения в первом разделе, который был в 57 раз меньше, выглядел блочно. Каждый блок 8×8 был представлен гораздо меньшим количеством DCT-коэффициентов по сравнению с версией более высокого качества.

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

    Просто для удовольствия, вот как это выглядит, используя всего 24 000 чисел или всего 5000 чисел. Довольно размыто, но почти узнаваемо!

    3. Длина серии, дельта-кодирование и кодирование Хаффмана

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

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

    JPEG использует около 5000 чисел, чтобы представить это, но мы можем сделать это намного лучше. Можете ли вы придумать схему кодирования для представления этого изображения с использованием как можно меньшего количества байтов?

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

    Размер файла сплошного черного изображения JPEG намного больше четырех байтов, потому что помните, что на уровне DCT сжатие применяется к блокам 8×8 за раз. Таким образом, нам понадобится как минимум один коэффициент DCT для каждого блока из 64 пикселей. Нам нужен только один, потому что вместо хранения одного коэффициента DCT, за которым следуют 63 нуля для этого изображения, кодирование длин серий позволяет нам просто сохранить одно число и сказать «остальные равны нулю».

    Дельта-кодирование — это метод сохранения каждого байта как относительного значения по сравнению с чем-то до него вместо сохранения его абсолютного значения.Это причина, по которой редактирование определенных байтов изменит цвет всех последующих пикселей. Например, вместо сохранения:

      12 13 14 14 14 13 13 14  

    Вы могли бы начать с 12, а оттуда просто сохранить, сколько вам нужно добавить или вычесть, чтобы получить следующее число. Таким образом, после дельта-кодирования приведенная выше последовательность становится:

      12 1 1 0 0 -1 0 1  

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

    Дельта-кодирование — один из немногих методов, который применяется вне блоков 8×8. Из 64 коэффициентов DCT первый — это просто постоянная волновая функция (вы видите его сплошным цветом). Он представляет собой среднюю яркость каждого блока для компонентов яркости или среднюю голубизну для компонентов Cb и т. Д. Это первое значение в каждом блоке DCT называется значением DC, и каждое значение DC кодируется дельта относительно предыдущих значений. .Таким образом, изменение яркости самого первого блока повлияет на все блоки изображения.

    Все это оставляет только одну последнюю загадку: как изменение всего лишь одного числа может полностью испортить изображение? Пока это не было свойством ни одного из слоев сжатия. Ответ кроется в заголовке JPEG. Это первые 500 или около того байтов, которые содержат метаданные об изображении, такие как его ширина и высота, и до сих пор не были включены во все редакторы байтов.

    Ниже исходное изображение с заголовком.

    Без заголовка практически невозможно (или, по крайней мере, очень сложно) декодировать изображение JPEG. Это было бы так, как если бы я пытался описать вам картину и начал придумывать слова, чтобы передать то, что я видел. Вероятно, это будет очень краткое описание, поскольку я могу определить слова, которые означают именно то, что я хочу сообщить, но это будет бессмысленно для кого-либо, кроме меня.

    Это может прозвучать нелепо, но именно это здесь и происходит. Каждое изображение JPEG сжимается с помощью кода, специфичного для этого конкретного изображения.Эти коды определены в словаре, хранящемся в заголовке. Этот метод называется кодированием Хаффмана , а словарь называется таблицей Хаффмана. Эта таблица отмечена в заголовке двумя байтами: 255, за которыми идет 196. Каждый компонент цвета может иметь свою собственную таблицу Хаффмана.

    Изменения в этих таблицах Хаффмана окажут наиболее сильное влияние на любое изображение. Хорошим примером является изменение второй цифры с 1 на 12 в строке 15. Изменение чего-либо после 125 в этой строке тоже работает.

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

    Это потенциально огромная трата памяти, если у вас много маленьких номеров. Кодирование Хаффмана — это метод, который позволяет нам ослабить требование, согласно которому каждое число должно занимать восемь бит. Это означает, что если вы видите два байта:

      234 115  

    На основе таблицы Хаффмана это может быть три значения.Чтобы извлечь их, вам нужно сначала разбить их на отдельные биты:

      11101010 01110011  

    Используя эти знания, вы можете один изящный трюк — вырезать заголовок из изображения JPEG и сохранить его отдельно. По сути, вы делаете это так, чтобы только вы могли его прочитать. Facebook на самом деле делает это, чтобы делать изображения в формате JPEG еще меньше.

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

    Затем следуйте таблице, чтобы выяснить, как их сгруппировать. Например, это могут быть первые шесть битов (111010), что равно 58 в десятичной системе, за которыми следуют еще пять битов (10011), которые равны 19, и, наконец, последние четыре бита (0011), то есть три.

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

    Итак, чтобы подвести итог, что всего нужно для декодирования изображения JPEG? Вам необходимо:

    1. Извлечь таблицу (ы) Хаффмана из заголовка и декодировать биты.
    2. Извлеките коэффициенты дискретного косинусного преобразования для каждого компонента цвета / яркости для каждого блока 8×8, отменив кодирование длины серии и дельты.
    3. Объедините косинусные волны на основе коэффициентов, чтобы получить значения пикселей для каждого блока 8×8 (это известно как обратное дискретное косинусное преобразование).
    4. Увеличьте масштаб компонентов цветности, если они были субдискретизированы (эта информация содержится в заголовке).
    5. Преобразует результирующий YCbCr каждого пикселя в RGB.
    6. Покажите изображение!

    Чтобы увидеть простую картинку с кошкой, нужно потрудиться! Но что мне нравится в этом, так это то, что вы можете видеть, насколько технология JPEG ориентирована на человека. Он полагается на причуды нашего восприятия для достижения гораздо большей степени сжатия, чем это возможно с помощью методов общего назначения. И теперь, когда вы понимаете, как работает JPEG, вы можете представить, сколько из этих методов можно распространить на другие области.Например, применение дельта-кодирования к видео может привести к значительному уменьшению размера файла, поскольку часто есть области, которые вообще не меняются между кадрами (например, фон).

    Весь код для этой статьи имеет открытый исходный код и включает инструкции по замене изображений в этих байтовых редакторах на свои собственные.

    Омар Шехата — программист графики в Cesium, работающий над трехмерными веб-картами с открытым исходным кодом. Он вырос в Александрии, Египет, и в настоящее время живет в Филадельфии, штат Пенсильвания.

    Отредактировано Мэтью Конленом и Викторией Урен.

    Прочтите следующую статью
    Миф о беспристрастной машине

    Уменьшение размера файла JPG. Если вы современный разработчик, то вы… | Colt McAnlis

    Если вы современный разработчик, то вы используете файлы JPG. Неважно, являетесь ли вы веб-разработчиком, мобильным разработчиком или каким-то странным системным администратором, который весь день рассылает мемы. Файлы JPG являются частью вашей работы и имеют решающее значение для впечатлений пользователей, которые извлекают выгоду из этой работы.

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

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

    Как только вы начнете изучать методы сжатия JPG и формат файла, вы начнете понимать, что, как и в случае с файлами PNG, есть много возможностей для улучшения. Например, проверьте разницу в размере файла при сохранении JPG из фотошопа по сравнению с «экспортом в Интернет»:

    Это примерно 90% уменьшение размера файла для простого красного квадрата .Видите ли, как и PNG, JPG также поддерживает некоторые данные фрагментов в формате файла, что означает, что фоторедакторы или камеры могут вставлять в файл информацию, не относящуюся к изображению. Вот почему ваша служба обмена фотографиями знает геолокацию последней вафли, которую вы съели, и с какой камерой вы ее сняли. Если вашему приложению не требуются эти дополнительные данные, то удаление их из файлов JPG может привести к значительным улучшениям.

    Но оказывается, с форматом можно сделать гораздо больше.

    Во-первых, такие инструменты, как JPEGMini, ориентированы на поиск более низкого качества (с потерями) сжатия без слишком сильного нарушения визуальной точности ваших изображений.Это похоже на то, что разработчики Mozilla сделали с MOZJpeg (хотя они явно заявляют, что их проект действительно нарушает совместимость).

    С другой стороны, jpegTran / cjpeg пытается улучшить размер без потерь, в то время как packJPG перепаковывает данные JPG в гораздо меньшую форму, хотя это отдельный формат файла и больше не совместим с JPG (что удобно, если вы можете сделай свой декодер в клиенте).

    В дополнение к ним существует множество веб-инструментов, но я не нашел их лучше, чем перечисленные (или, скорее, большинство из них просто используют указанные выше инструменты за кулисами…).И, конечно же, у ImageMagick есть свой набор хитростей.

    Конечным результатом является то, что использование этих инструментов часто может привести к уменьшению размера файлов на 15% и 24%, что является хорошим улучшением при небольших вложениях.

    [ОБНОВЛЕНИЕ 26.03.2017] Google только что выпустил новый компрессор JPG, Guetzli, который может уменьшать файлы еще на ~ 35%, сохраняя при этом совместимость формата со стандартами. Guetzli работает во многом так же, как его двоюродный брат, Zopfli, в том смысле, что это уменьшение размера происходит за счет дополнительного времени обработки во время кодирования.

    Давайте проясним это: вы никогда не должны отправлять файлы JPG с качеством 100.

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

    Как указывает проект imgmin, обычно наблюдается лишь небольшое изменение воспринимаемого пользователем качества для сжатия JPG между уровнями 75 и 100:

    Для среднего JPEG есть очень незначительное, в основном незначительное изменение в * очевидном * качество от 100 до 75, но значительная разница в размерах файлов для каждого шага вниз.Это означает, что многие изображения выглядят хорошо для обычного зрителя с качеством 75, но они вдвое меньше, чем они были бы с качеством 95. Когда качество падает ниже 75, наблюдаются более значительные визуальные изменения и уменьшается экономия файлов.

    Итак, запуск с настройкой качества 75 — очевидное начальное состояние; но здесь мы упускаем более серьезную проблему: мы не можем ожидать, что люди будут настраивать это значение вручную.

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

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

    И вы можете увидеть этот эффект вживую и в полевых условиях: проект imgmin также демонстрирует, что большинство крупных веб-сайтов имеют тенденцию колебаться изображения с таким качеством = 75 баллов почти для всех их изображений JPG:

    Миниатюры изображений Google: 74–76
    Полноразмерные изображения Facebook: 85
    Первая страница Yahoo JPG: 69–91
    Первая страница YouTube JPG: 70–82
    Википедия изображений: 80
    Живой фон Windows: 82
    изображений JPEG пользователя Twitter: 30–100

    Проблема здесь в том, что выбранные значения не идеальны .

    Обычно они являются результатом одного значения качества, выбранного в вакууме и затем применяемого ко всем изображениям, проходящим через систему. В действительности некоторые изображения могут быть сжаты дальше с незначительной потерей качества, в то время как другие изображения будут сжаты слишком сильно и не будут выглядеть хорошо; Значение качества должно меняться для каждого изображения, чтобы найти идеальную золотую середину.

    Что, если бы существовал способ измерить визуальное ухудшение изображения при сжатии?
    Что, если вы могли бы проверить это значение по метрике качества, чтобы узнать, является ли он хорошим уровнем?
    Что, если вы могли бы автоматизировать два вышеупомянутых, чтобы работать на вашем сервере?

    Вот это .
    Может до .
    Всего возможных .

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

    Есть несколько измерений этого, в частности показатели PSNR и SSIM. У каждого есть свои нюансы в отношении измерения оценки, поэтому я предпочитаю новый проект Butteraugli. После тестирования на корпусе изображений я обнаружил, что эта метрика намного более понятна мне с точки зрения визуального качества.

    Для этого вы пишете простой сценарий по адресу:

    В результате получается наименьший возможный файл JPG, который не оказывает более заметного воздействия на ПЭТ. На изображении ниже разница в экономии составляет 170 тыс., Но визуально все выглядит так же.

    Конечно, вы можете пойти еще дальше. Возможно, ваша цель — допустить большую потерю зрения, чтобы сохранить пропускную способность. Вы могли бы легко продолжить это, но в этом есть безумие. С , сейчас , Butteraugli означает, что любой результат> 1.1 считается «плохо выглядящим» и не пытается определить, как это выглядит, от численного авторитета. Таким образом, вы можете запустить скрипт, чтобы он остановился, как только визуальное качество достигнет 2,0 (см. Изображение ниже), но в этот момент неясно, с каким визуальным скаляром вы проводите тестирование.

    Одна из причин, по которой JPG такой мощный, заключается в том, что ожидается, что в блоке 8×8 будет небольшая визуальная дисперсия. Непосредственно человеческий глаз больше настроен на визуальные изменения в канале яркости изображения YCbCr.Таким образом, если вы можете уменьшить количество вариаций цветности в блоках 8×8, вы в конечном итоге получите меньше визуальных артефактов и лучшее сжатие. Самый простой способ сделать это — применить медианный фильтр к высококонтрастным областям вашего канала цветности. Давайте посмотрим на этот процесс с образцом изображения ниже.

    Уловка заключается в том, что большинство программ для редактирования фотографий не поддерживают редактирование в цветовом пространстве YCbCr; но они поддерживают LAB. Канал L представляет яркость (которая близка к каналу Y, яркости), в то время как каналы A и B представляют красный / зеленый и синий / желтый, компоненты, аналогичные компонентам Cb и Cr.Преобразовав ваше изображение в LAB, вы должны увидеть следующие каналы:

    Наше изображение разделено на каналы L, A, B в Photoshop

    Мы хотим сгладить резкие переходы в каналах A / B. Это даст компрессору более однородные значения для работы. Для этого мы выбираем области с высокой детализацией в каждом из этих каналов и применяем размытие на 1–3 пикселя к этой области. В результате информация значительно сгладится, не повредив визуальному восприятию изображения.

    Слева мы видим маску выделения в Photoshop (мы выбираем фоновые дома), справа результат операции размытия

    Главное здесь то, что, слегка размывая режимы A / B нашего изображения, мы можем уменьшить количество визуальной дисперсии в этих каналах, так что, когда JPG проходит фазу понижающей дискретизации, ваше изображение получает меньше уникальной информации в каналах CbCr. Вы можете увидеть результат ниже.

    Верхнее изображение — это наш исходный файл, а нижнее — мы размыли некоторые данные Cb / CR в изображении, создав файл, который стал меньше примерно на 50%.

    [обновление] С момента написания этой статьи команда сжатия Google выпустила Guetzli, который, IMHO, является одним из самых впечатляющих кодеков JPG, которые я когда-либо видел. В настоящее время он является современным, генерируя изображения JPG на 20–30% меньше, чем libJPEG, что делает его равным с WebP (см. Ниже) без необходимости поддержки уникального формата. У меня пока не было возможности разобраться, как работает кодировщик, но я очень хочу найти время, чтобы разобраться в этом;)

    На данный момент WebP не должен быть для вас новостью.Я уже давно предлагаю людям использовать его, потому что это действительно впечатляющий кодек. Одно из первоначальных исследований сравнивало WebP с JPG и показало, что файлы могут быть на 25% -33% меньше с тем же индексом SSIM, что дает значительную экономию при простой замене файловых форматов.

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

    Спасибо, Марк, я послал тебе картошки; ЛМК, когда они приедут.

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

    Готово. Двигаться дальше.

    Но это только половина дела. Современные приложения используют изображения в разных местах и ​​разными способами для различных нужд. Не существует единого универсального решения, и, безусловно, есть возможности использовать Интернет в качестве средства передачи информации.

    Вот почему так впечатляет то, что инженеры @ Facebook придумали отличный способ использовать все возможные уловки для сжатия своих изображений. Результатом должны стать мои любимые посты в Интернете, уменьшив их предварительные фотографии до 200 байт каждая.

    Магия, лежащая в основе этого решения, проистекает из большого анализа данных заголовка JPG (которые они смогли удалить и жестко запрограммировать в кодеке) наряду с агрессивным процессом размытия и масштабирования, который происходит во время загрузки.