У меня есть веб-галерея, где я отображаю изображения, которые различаются по размеру файла и разрешению, загруженному пользователями. В настоящее время все изображения являются базовыми. Поэтому я хотел бы знать, действительно ли это окажет значительное влияние, если я преобразую их в прогрессивные изображения. Каковы преимущества и недостатки использования прогрессивных изображений.
Прогрессивный jpeg против базового jpeg
Ответы (2)
Стандарт JPEG определяет множество режимов сжатия. Только три из них широко используются:
- Базовый последовательный
- Расширенный последовательный
- прогрессивный
Единственная разница в первом заключается в разрешенном количестве столов. В остальном они кодируются и декодируются точно так же.
JPEG делит изображения на кадры, которые затем делятся на сканы. Вышеуказанные режимы разрешают только один кадр. Рамка — это образ. Сканирование проходит через данные изображения. Скан может содержать данные для одного компонента цвета или может быть чередован и содержать данные для нескольких компонентов цвета.
- Последовательный поток JPEG в оттенках серого будет иметь одно сканирование.
- Цветной последовательный поток JPEG может иметь одно или три сканирования.
JPEG берет 8x8 блоков пиксельных данных и применяет к этим данным дискретное косинусное преобразование. Данные из 64 пикселей становятся 64 коэффициентами DCT. Первый коэффициент DCT называется коэффициентом «DC», а остальные 63 называются коэффициентами «AC».
Это сбивает с толку терминологию, основанную на аналогии с постоянным и переменным током. Коэффициент DC аналогичен среднему значению пикселя блока.
В последовательном JPEG 64 коэффициента в блоке кодируются вместе (коэффициенты DC и AC кодируются по-разному). В Progressive JPEG сканирование коэффициентов DC и AC кодирует битовые поля (настраиваемого размера) внутри коэффициента. Теоретически у вас может быть отдельное сканирование для каждого бита каждого компонента.
Прогрессивный JPEG намного сложнее реализовать и использовать. Если вы создаете кодировщик для последовательного JPEG, вам просто нужно дать вызывающей стороне возможность использовать сканирование с чередованием или без чередования. Для прогрессивного JPEG вашему кодировщику нужен механизм, чтобы вызывающая сторона определяла, сколько сканирований и какие биты должны быть закодированы в каждом сканировании.
Прогрессивное кодирование может быть медленнее, чем последовательное, потому что вам нужно сделать несколько проходов по данным.
Проблема скорости в прогрессивном декодировании зависит от того, как это делается. Если вы декодируете все изображение сразу, прогрессивный код может быть немного медленнее, чем последовательный. Если ваш декодер показывает затухание изображения по мере обработки потока, он будет намного медленнее, чем последовательный. Каждый раз, когда вы обновляете дисплей, вы должны выполнять обратное DCT, повышающую дискретизацию и преобразование цвета.
С другой стороны, можно получить гораздо лучшее сжатие, используя прогрессивный JPEG с хорошо настроенными развертками.
Нет никакой разницы в качестве между прогрессивным и последовательным
В этой книге описаны процессы:
https://rads.stackoverflow.com/amzn/click/com/0201604434
Единственное отличие состоит в том, что прогрессивные изображения кодируются таким образом, что браузеры могут отображать приблизительный предварительный просмотр изображения во время его загрузки, качество которого постепенно улучшается, пока, наконец, загрузка не будет завершена. Базовое изображение будет загружаться сверху вниз, прогрессивное изображение будет загружаться от низкого разрешения к высокому.
В браузерах, не поддерживающих прогрессивные изображения, вы ничего не увидите, пока не загрузите все изображение. (В настоящее время все современные браузеры наполовину поддерживают прогрессивные JPEG.)
Вы можете увидеть анимацию разницы в действии, например. здесь: https://www.youtube.com/watch?v=TOc15-2apY0< /а>