Содержание

Как работает JPEG-сжатие? Разбор | Droider.ru

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

Вы когда-нибудь задумывались, сколько места фотки на наших устройствах?

Давате посмотрим на этот снимок:

Его разрешение 12. 2 мегапикселя или 4032 × 3024 точек. Сколько он должна бы весить? Давайте посчитаем. Как известно, цвет каждого пикселя определяется тремя составляющими: красным, зелёным и синим. Каждая составляющая кодируется восьмибитным числом. Получим, что такое изображение будет весить 8х3х4032×3024 = 292 626 432 бит, то есть почти 300 мб!!!

В реальности же она весит 7.36 мб. То есть в 40 раз МЕНЬШЕ! А если пожать через Whatsapp, будут какие-то 200 килобайт. Все благодаря формату JPEG, с которым мы сталкиваемся постоянно.

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

К началу 80-х годов прошлого столетия компьютеры умели хранить и показывать цифровые изображения, однако для воплощения этого существовало множество различных решений. Например, нельзя было просто отправить изображение с одного компьютера на другой. Для решения этой проблемы в 1986 году был собран комитет экспертов со всего мира под названием «Объединённая группа экспертов по фотографии» (Joint Photographic Experts Group, JPEG). Эта группа людей и создала стандарт сжатия цифровых изображений JPEG в 1992 году, который спасает нас до сих пор.

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

Теперь стоит поговорить о том, как устроено наше зрение. Как известно, в глазу есть два типа восприимчивых к свету клеток: палочки и колбочки (rods and cones). Палочки плохо восприимчивы к свету, но играют решающую роль для зрения в условиях низкой освещенности, в то время как колбочки имеют цветовые рецепторы. Именно они обеспечивают нашим глазам цветное зрение. В каждом глазу имеется около 100 миллионов палочек и всего лишь 6 миллионов колбочек.

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

Но как именно нам отделить яркость от цвета? Как известно, каждый пиксель характеризуется тремя компонентами: R,G,B — по одной переменной для каждого цвета, которые могут принимать значения в диапазоне от 0 до 255.

Хитрость в том, что эту же информацию мы можем сохранить, используя другие три переменные: Y, Cb, Cr. Тогда мы без проблем можем преобразовать изображение с пикселями формата RGB в новый формат с другими компонентами Y,Cb,Cr. Здесь Y отвечает за яркость, а Cb и Cr- цветовые каналы. Таким образом, вычислив эти переменные, мы получаем три новых изображения, составленных из этих трех компонент. Вычисление происходит по таким мудреным формулам, если интересно.

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

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

Теперь делается еще один ход: каждые 4 пикселя в обоих цветовых изображениях объединяются в 1, тем самым удаляется повторяющаяся информация. В результате, детали, плохо воспринимаемые нашими глазами, т.е. обе цветовые составляющие (Cr и Сb), уменьшаются до ¼ своего исходного размера, а яркостная составляющая остаётся прежней. Таким образом, всего за два шага изображение становится в 2 раза меньше исходного размера

Было: 1+1+1=3

Стало: ¼+¼+1=1,5

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

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

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

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

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

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

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

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

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

Это немного напоминает составление фоторобота: нос номер 9, рот номер 13, глаза среднее между нумером 6 и 42.

Прежде, чем идти дальше, подведем промежуточные итоги. Что мы имеем на данный момент?

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

Как это делается?

Для этого этапа используется вот такая таблица. Называется таблица квантования. К квантовым компьютерам не имеет отношения. Не пугайтесь, какждется это послдений сложный термин на сегодня. Если по простому: она определяет какую часть из полученной прежде информации мы возьмем в итоговый файл. Смотрите: это матрица 8х8, содержащая коэффициенты, на которые мы делим числа из нашей исходной матрицы. Степень сжатия задаётся характеристиками таблицы квантования, т.е. чем больше коэффициенты в этой таблице, тем меньше будут числа в новой матрице. В зависимости от характеристик таблицы квантования мы можем уменьшить размер изображения до 95% от первоначального размера, но в таком случае, конечно, качество сжатого изображения будет далеко не самым высоким. Именно эта таблица и является основной настройкой jpeg, регулирующей степень сжатия.

Теперь переходим к квантованию, т.е. этапу, на котором будет производиться наибольшее сжатие. Здесь происходит сначала деление чисел из матрицы, которую мы получили на прошлом этапе, на определенные коэффициенты, соответствующие таблице квантования, а затем происходит округление полученных чисел до ближайшего целого (например: делим 560/4=140; -41/3=-13,7- округляем до целого, получаем -14 и т.

д.). Но что ещё за таблица квантования и откуда она берется?

  1. Исходная матрица
  2. Таблица квантования
  3. Новая матрица

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

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

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

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

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

Процесс сжатия завершён. Мы получили сжатое изображение в виде последовательности чисел.

Как же теперь вывести его на экран? Для этого необходимы все те же самые действия, но уже проделанные в обратном порядке: 1. Декодирование с помощью алгоритма Хаффмана, 2. Декодирование по методу длин серий, 3. Заполнение матрицы 8х8 коэффициентами зигзагообразным методом для каждого из блоков 8х8, 4. Умножение каждого числа матрицы на соответствующий коэффициент согласно таблице квантования, 5. Масштабирование компоненты цветов, 6. Преобразование полученных значений Y, Cb и Cr для каждого пикселя в RGB и 7. Вывод изображения уже в формате JPEG на экран. Готово!

Подведём итоги. Как видите, при работе JPEG используется огромное количество нюансов: особенности строения глаза, математические методы сжатия, разложение в спектр.

Конечно, у JPEG есть достаточно большое количество недостатков: невозможность качественного сжатия текстовых изображений, ухудшение качества при повторном сохранении, но несмотря на все его многочисленные недостатки и почтенный возраст, он по сей день остаётся самым популярным форматом изображений в интернете, хотя сейчас ему на смену начали приходить другие, гораздо более продвинутые форматы, такие как HEIC, AV1, WebP и другие. Причины популярности JPEG в настоящее время, конечно, есть: он очень хорошо изучен за 30 лет существования, является бесплатным, а также всем понятен и привычен.

Post Views: 3 838

Сжатие фотографий без видимой потери качества: опыт Yelp / Хабр

На Yelp хранится более 100 миллионов пользовательских фотографий, от картинок ужинов и причёсок до одной из наших последних фич, #yelfies. Эти изображения составляют основную часть трафика для пользователей приложения и веб-сайта, а их хранение и передача обходятся недёшево. Стараясь предоставить людям наилучший сервис, мы усиленно работали над оптимизацией всех фотографий и добились среднего уменьшения размера на 30%. Это экономит людям время и трафик, а также сокращает наши расходы на обслуживание этих изображений. Ах да, и мы сделали это без ухудшения качества фотографий!

Исходные данные

Yelp хранит пользовательские фотографии уже 12 лет. Мы сохраняем lossless-форматы (PNG, GIF) как PNG, а все остальные форматы в JPEG. Для сохранения файлов используются Python и Pillow, а загрузки фотографий начинаются примерно с такого сниппета:

# do a typical thumbnail, preserving aspect ratio
new_photo = photo.copy()
new_photo.thumbnail(
    (width, height),
    resample=PIL.Image.ANTIALIAS,
)
thumbfile = cStringIO.StringIO()
save_args = {'format': format}
if format == 'JPEG':
    save_args['quality'] = 85
new_photo.
save(thumbfile, **save_args)

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

Оптимизации

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

  1. Изменения в Pillow
    • Флаг Optimize
    • Progressive JPEG
  2. Изменения в логике фотоприложения
    • Распознавание больших PNG
    • Динамическое качество JPEG
  3. Изменения в энкодере JPEG
    • Mozjpeg (треллис-квантование, кастомная матрица квантования)

Изменения в Pillow


Флаг Optimize
Это одно из самых простых изменений, которые мы сделали: передать Pillow ответственность за дополнительную экономию размера файла за счёт времени CPU (optimize=True).
По определению, это никак не отразится на качестве фотографий.

Для JPEG этот флаг означает указание энкодеру найти оптимальный код Хаффмана, сделав дополнительный проход при сканировании каждого изображения. Каждый первый проход, вместо записи в файл, вычисляет статистику вхождений по каждому значению, эта информация нужна для идеального кодирования. В стандарте PNG используется zlib, так что флаг оптимизации в данном случае указывает энкодеру использовать gzip -9 вместо gzip -6.

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

Progressive JPEG
При сохранении JPEG можно выбрать несколько различных типов:

  • Baseline JPEG, которые загружаются сверху вниз
  • Progressive JPEG, которые загружаются от размытых к чётким. Опцию прогрессирующих изображений легко активировать в Pillow (progressive=True). В результате, качество субъективно повышается (так и есть, легче заметить частичное отсутствие изображения, чем его неидеальную резкость)
Вдобавок, метод упаковки прогрессирующих изображений таков, что обычно это приводит к меньшему размеру файла.
Как более полно объясняется в статье Википедии, в формате JPEG применяется зигзагообразная проходка по блоку 8×8 пикселей для энтропийного кодирования. Когда значения этих блоков пикселей не упакованы и расположены по порядку, то обычно сначала идут ненулевые значения, а затем последовательности нулей, и такой паттерн повторяется и чередуется для каждого блока 8×8 на изображении. С прогрессивным кодированием изменяется порядок обработки пиксельных блоков. Первыми в файле идут большие значения для каждого блока (что даёт первым сканам прогрессирующего изображения такую характерную блочность), а ближе к концу хранятся длинные диапазоны малых значений, включая больше нулей, эти диапазоны обеспечивают тонкую детализацию. Такое перераспределение данных в файле не меняет само изображение, но увеличивает количество нулей в ряду друг за другом (которые легче сжать).

Сравнение Baseline JPEG и Progressive JPEG

Пример, как работает рендеринг Baseline JPEG


Пример, как работает рендеринг Progressive JPEG


Изменения в логике фотоприложения


Распознавание больших PNG
Yelp работает с двумя форматами для пользовательского контента — JPEG и PNG. JPEG отлично подходит для фотографий, но обычно не справляется с высококонтрастным дизайнерским контентом (таким как логотипы). В отличие от него, PNG сжимает изображение абсолютно без потерь, отлично подходит для графики, но слишком громоздок для фотографий, где маленькие искажения всё равно не заметны. В тех случаях, когда пользователи загружают фотографии в формате PNG, мы можем сэкономить много места, если распознаем такие файлы и сохраним их в JPEG. Один из основных источников фотографий PNG на Yelp — это скриншоты с мобильных устройств и приложений, которые изменяют фотографии, накладывая эффекты и добавляя рамки.


Слева: типичный скомбинированный PNG с логотипом и рамкой. Справа: типичный PNG, полученный со скриншота

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

Проведя проверку на экспериментальной выборке из 2500 изображений, мы выяснили, что сочетание размера файла и количества уникальных пикселей позволяет довольно точно определить фотографии. Мы генерируем уменьшенную копию на максимальном разрешении и проверяем, если размер файла больше 300 КиБ. Если так, то проверяем пиксели изображения, есть ли там больше 216 уникальных цветов (Yelp конвертирует загруженные изображения RGBA в RGB, но если бы мы этого не делали, то всё равно проверяли бы это).

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

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

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

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

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

  • Снизу вверх (Bottom-up): Эти алгоритмы генерируют настроенные таблицы квантования, обрабатывая изображение на уровне блоков 8×8 пикселей. Они одновременно рассчитывают, сколько теоретического качества было потеряно и как эти потерянные данные усиливают или сокращают видимость искажений для человеческого глаза.
  • Сверху вниз (Top-down): Эти алгоритмы сравнивают целое изображение с его оригинальной версией и определяют, сколько информации было потеряно. Последовательно генерируя кандидатов с различными настройками качества, мы можем выбрать того, который соответствует минимальному уровню оценки, смотря какой алгоритм оценки мы используем.
Мы оценили работу алгоритма bottom-up и пришли к выводу, что он не обеспечивает должных результатов на высших настройках качества, которые мы хотели использовать (хотя кажется, что у него есть потенциал в среднем диапазоне качества, где энкодер может быть более смелым относительно выбора отбрасываемых байтов). Многие научныеработы по этой стратегии были опубликованы в начале 90-х, когда вычислительные ресурсы были в дефиците, так что было сложно использовать ресурсоёмкие методы, которые использует вариант Б, такие как оценка взаимосвязей между блоками.

Так что мы обратились ко второму подходу: использование делённого пополам алгоритма для генерации изображений-кандидатов на разных уровнях качества и оценка падения качества каждого изображения путём вычисления его индекса структурного сходства (SSIM) с помощью pyssim до тех пор, пока это значение находится в пределах настраиваемого, но статичного порога. Это позволило нам выборочно понизить средний размер файла (и среднее качество) только для изображений, которые были выше воспринимаемого порога.

На диаграмме внизу мы отобразили значения SSIM для 2500 изображений, заново сгенерированных с тремя разными настройками качества.

  1. Оригинальные изображения, созданные с помощью текущего метода при quality = 85, показаны синим цветом.
  2. Альтернативный подход для снижения размера файлов, со снижением настройки качества до quality = 80, показан красным цветом.
  3. И наконец подход, на котором мы в итоге остановились, динамическое качество SSIM 80-85, показан оранжевым цветом. Здесь качество выбирается из диапазона от 80 до 85 (включительно), в зависимости от совпадения или превышения соотношения SSIM: предварительно вычисляемого статической величины, которая совершает этот переход где-то посредине диапазона изображений. Это позволяет нам снизить средний размер файла без понижения качества плохо выглядящих изображений.


Индексы SSIM для 2500 изображений с тремя разными стратегиями изменения настроек качества

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

  1. Чувствителен к ошибке квантования JPEG
  2. Быстрый, простой алгоритм
  3. Может быть рассчитан на нативных объектах PIL без конвертации изображений в PNG и передачи их в приложения CLI (см. #2)
Пример кода для динамического качества:

import cStringIO
import PIL.Image
from ssim import compute_ssim
 
 
def get_ssim_at_quality(photo, quality):
    """Return the ssim for this JPEG image saved at the specified quality"""
    ssim_photo = cStringIO.StringIO()
    # optimize is omitted here as it doesn't affect
    # quality but requires additional memory and cpu
    photo.save(ssim_photo, format="JPEG", quality=quality, progressive=True)
    ssim_photo.seek(0)
    ssim_score = compute_ssim(photo, PIL.Image.open(ssim_photo))
    return ssim_score
 
 
def _ssim_iteration_count(lo, hi):
    """Return the depth of the binary search tree for this range"""
    if lo >= hi:
        return 0
    else:
        return int(log(hi - lo, 2)) + 1
 
 
def jpeg_dynamic_quality(original_photo):
    """Return an integer representing the quality that this JPEG image should be
    saved at to attain the quality threshold specified for this photo class. 
 
    Args:
        original_photo - a prepared PIL JPEG image (only JPEG is supported)
    """
    ssim_goal = 0.95
    hi = 85
    lo = 80
 
    # working on a smaller size image doesn't give worse results but is faster
    # changing this value requires updating the calculated thresholds
    photo = original_photo.resize((400, 400))
 
    if not _should_use_dynamic_quality():
        default_ssim = get_ssim_at_quality(photo, hi)
        return hi, default_ssim
 
    # 95 is the highest useful value for JPEG. Higher values cause different behavior
    # Used to establish the image's intrinsic ssim without encoder artifacts
    normalized_ssim = get_ssim_at_quality(photo, 95)
    selected_quality = selected_ssim = None
 
    # loop bisection. ssim function increases monotonically so this will converge
    for i in xrange(_ssim_iteration_count(lo, hi)):
        curr_quality = (lo + hi) // 2
        curr_ssim = get_ssim_at_quality(photo, curr_quality)
        ssim_ratio = curr_ssim / normalized_ssim
 
        if ssim_ratio >= ssim_goal:
            # continue to check whether a lower quality level also exceeds the goal
            selected_quality = curr_quality
            selected_ssim = curr_ssim
            hi = curr_quality
        else:
            lo = curr_quality
 
    if selected_quality:
        return selected_quality, selected_ssim
    else:
        default_ssim = get_ssim_at_quality(photo, hi)
        return hi, default_ssim
Есть несколько других статей в блогах об этой технике, здесь одна от Кольта Маканлиса. И когда мы собирались публиковаться, Etsy тоже опубликовала свою! Дай пять, быстрый интернет!

Изменения в энкодере JPEG


Mozjpeg
Mozjpeg — это open-source форк libjpeg-turbo, который пожертвовал временем выполнения ради размера файлов. Такой подход хорошо совместим с офлайновыи конвейером по регенерации файлов. С потреблением ресурсов в 3-5 раз больше, чем libjpeg-turbo, этот алгоритм делает изображения меньше по размеру!

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

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

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

Mozjpeg + Pillow
В большинстве дистрибутивов Linux по умолчанию установлен libjpeg. Так что mozjpeg под Pillow не работает по умолчанию, но это не слишком сложно настроить в конфигурации. При сборке mozjpeg используйте флаг --with-jpeg8 и убедитесь, что он может быть залинкован с Pillow. Если вы используете Docker, то можно сделать такой Dockerfile:

FROM ubuntu:xenial
 
RUN apt-get update \
	&& DEBIAN_FRONTEND=noninteractive apt-get -y --no-install-recommends install \
	# build tools
	nasm \
	build-essential \
	autoconf \
	automake \
	libtool \
	pkg-config \
	# python tools
	python \
	python-dev \
	python-pip \
	python-setuptools \
	# cleanup
	&& apt-get clean \
	&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
 
# Download and compile mozjpeg
ADD https://github.com/mozilla/mozjpeg/archive/v3.2-pre.tar.gz /mozjpeg-src/v3.2-pre.tar.gz
RUN tar -xzf /mozjpeg-src/v3.2-pre.tar.gz -C /mozjpeg-src/
WORKDIR /mozjpeg-src/mozjpeg-3.2-pre
RUN autoreconf -fiv \
	&& . /configure --with-jpeg8 \
	&& make install prefix=/usr libdir=/usr/lib64
RUN echo "/usr/lib64\n" > /etc/ld.so.conf.d/mozjpeg.conf
RUN ldconfig
 
# Build Pillow
RUN pip install virtualenv \
	&& virtualenv /virtualenv_run \
	&& /virtualenv_run/bin/pip install --upgrade pip \
	&& /virtualenv_run/bin/pip install --no-binary=:all: Pillow==4.0.0
Это всё! Собирайте и сможете использовать Pillow с mozjpeg в нормальном процессе обработки изображений.

Эффект

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

  1. Изменения в настройках Pillow дали экономию 4,5%
  2. Определение больших PNG дало экономию 6,2%
  3. Динамическое качество дало экономию 4,5%
  4. Переход на энкодер mozjpeg дал экономию 13,8%
Всё вместе это привело к сокращению среднего размера изображений примерно на 30%, что мы использовали для наших самых больших и самых распространённых разрешений фотографий, сделав сайт быстрее для пользователей и сэкономив на передаче данных терабайты в день. Как зафиксировано на уровне CDN:


Изменение среднего размера файла со временем, у CDN (вместе с другими файлами, которые не являются изображениями)

Чего мы не делали

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

Субдискретизация
Субдискретизация — основной фактор в определении и качества, и размера файлов веб-изображений. В интернете можно найти более подробное описание субдискретизации, но для этой статьи достаточно сказать, что мы уже выполняем субдискретизацию до 4:1:1 (это настройки по умолчанию Pillow, если не указать другие настройки), так что мы вряд ли получим какой-то выигрыш при дальнейшей оптимизации.

Кодирование PNG с потерями
Зная то, что мы делаем с PNG, вариант с сохранением этих изображений в прежнем формате, но используя энкодер с потерями вроде pngmini, имеет смысл, но мы всё равно выбрали вариант сжатия в JPEG. Тем не менее, автор энкодера говорит о сжатии файлов на 72-85%, так что это альтернативный вариант с обоснованными результатами.

Более современные форматы
Поддержка более современных форматов вроде WebP или JPEG2k определённо рассматривалась нами. Но даже если бы мы реализовали этот гипотетический проект, всё равно остался бы длинный хвост пользователей, которым нужны изображения JPEG/PNG, так что усилия по их оптимизации в любом случае были не напрасными.

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

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

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

  • High Performance Images
  • Designing for Performance

Сжатие изображений JPEG с высоким выходным качеством OnLine

Сжатие изображений JPEG с высоким выходным качеством OnLine

Бесплатный онлайн-оптимизатор изображений JPEG. Сжимайте изображения JPEG в современных браузерах, таких как Chrome, Opera и Firefox.

Работает на aspose.com и aspose.cloud

Сохранить как

*Загружая файлы или используя наш сервис, вы соглашаетесь с нашими Условиями обслуживания и Политикой конфиденциальности

Поделиться на Facebook

Поделиться на Twitter

Поделиться на LinkedIn

Посмотреть другие приложения

Попробуйте наш Cloud API

Посмотреть исходный код

Оставить отзыв

Добавить это приложение в закладки

Нажмите Ctrl + D, чтобы добавить эту страницу в избранное, или Esc, чтобы отменить действие

Aspose.
I магический компресс

 

Интегрируйте функцию сжатия JPG в свои проекты

Это бесплатное сжатие основано на Aspose.Imaging for .NET , который представляет собой быстрый API для обработки изображений, включая, помимо прочего, сжатие изображений.
Вы можете использовать его в своих собственных приложениях и интегрировать функцию сжатия изображений в свои проекты C# .NET. Aspose.Imaging for .NET подходит для следующих сценариев:

  • Высокопроизводительное сжатие изображений с помощью собственных API-интерфейсов
  • Интеграция сжатия изображений в ваш собственный проект/решение
  • 100% частные локальные API-интерфейсы. Ваши файлы обрабатываются на ваших собственных серверах
  • Кроссплатформенное развертывание

Пожалуйста, посетите https://products.aspose.com/imaging/net/compress/jpg, чтобы попробовать Aspose.Imaging для .NET в ваших собственных приложениях.

Для разработчиков Java мы предлагаем собственный API Aspose.Imaging for Java для использования в ваших приложениях Java. Пожалуйста, посетите https://products.aspose.com/imaging/java/compress/jpg, чтобы попробовать.

Как сжимать изображения JPEG с помощью Aspose.Imaging Compress

  1. Щелкните внутри области перетаскивания файлов, чтобы загрузить изображения JPEG, или перетащите файлы изображений JPEG
  2. Вы можете загрузить максимум 10 файлов для операции
  3. Ваши изображения JPEG будут сжаты автоматически
  4. Вы также можете указать свои параметры сжатия для каждого изображения JPEG
  5. Ссылка для загрузки сжатых изображений будет доступна сразу после завершения операции сжатия
  6. Вы также можете отправить ссылку на сжатый файл изображения на ваш адрес электронной почты
  7. Обратите внимание, что файл будет удален с наших серверов через 24 часа, а ссылки для скачивания перестанут работать после этого периода времени

Часто задаваемые вопросы

  1. ❓ Как сжать изображение в формате JPEG?

    Во-первых, вам нужно добавить файл изображения JPEG: перетащите файл изображения JPEG или щелкните внутри белой области, чтобы выбрать файл. Затем настройте параметры сжатия и нажмите кнопку «Сжать». После завершения процесса вы можете скачать файл с результатами.

  2. 🛡️ Безопасно ли сжимать изображения JPEG с помощью бесплатного приложения Aspose.Imaging Image Compress?

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

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

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

  3. 💻 Могу ли я сжимать изображения JPEG в Linux, Mac OS или Android?

    Да, вы можете использовать бесплатное приложение Aspose. Imaging Image Compress в любой операционной системе с веб-браузером. Наш сервис работает онлайн и не требует установки какого-либо программного обеспечения.

  4. 🌐 Какой браузер мне следует использовать для сжатия изображений JPEG?

    Для сжатия изображений в формате JPEG можно использовать любой современный браузер, например, Google Chrome, Firefox, Opera, Safari.

  5. ❓ Могу ли я использовать полученное изображение в коммерческих целях?

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

Заполнитель для объяснения ошибки

Электронная почта:

 Сделайте этот форум закрытым, чтобы он был доступен только вам и нашим разработчикам

Вы успешно сообщили об ошибке, Вы получите уведомление электронная почта, когда ошибка будет исправлена ​​ Щелкните эту ссылку, чтобы посетить форумы.

 

Сжатие JPG до 100 КБ без потери качества за несколько кликов

Сжатие JPG до 100 КБ без потери качества за несколько кликов | докхаб

6 августа 2022 г.

заполненных форм

подписанных форм

отправленных форм

01. Загрузите документ со своего компьютера или из облачного хранилища.

02. Добавляйте текст, изображения, рисунки, фигуры и многое другое.

03. Подпишите документ онлайн в несколько кликов.

04. Отправка, экспорт, факс, загрузка или распечатка документа.

Быстро сжимайте JPG до 100 КБ без потери качества

Что касается инструментов редактирования документов, чем проще их использовать в повседневных задачах, тем успешнее будет ваш рабочий процесс. Если вы хотите сжать .JPG до 100 КБ без потери качества, убедитесь, что ваше решение для редактирования предоставляет вам доступ к этой функции в одно мгновение. Попробуйте внедрить DocHub в свой повседневный документооборот, чтобы повысить производительность и упростить процессы. Это комплексный инструмент для онлайн-редактирования файлов. Используйте его функции для создания, редактирования, совместного использования и совместной работы над документами и легко сжимайте формат файла Joint Photographic Experts Group до 100 КБ без потери качества в течение нескольких минут. Инструмент имеет простой и понятный пользовательский интерфейс, поэтому любой пользователь очень быстро найдет способ обойти его функции. Все, что вам нужно для начала работы, — это профиль пользователя.

  1. Перейдите на веб-сайт DocHub и начните регистрацию, нажав Зарегистрироваться .
  2. Сообщите данные своей учетной записи. Введите свой текущий адрес электронной почты и придумайте надежный пароль безопасности.
  3. Отправьте данные для завершения регистрации. Вы будете перенаправлены на страницу панели инструментов, где вы можете без промедления сжать JPG до 100 КБ без потери качества. Перетащите файл, чтобы открыть его в режиме редактирования.
  4. Внесите в документ все необходимые изменения.
  5. Завершите редактирование и сохраните файл. Вы можете сохранить его в своем профиле или просто скачать.

Сжать .JPG до 100 КБ без потери качества с помощью DocHub никогда не бывает сложно. Этот инструмент может улучшить вашу индивидуальную и групповую работу над различными задачами редактирования документов. Попробуйте больше функций, чтобы оптимизировать рабочий процесс и повысить производительность.

Упрощенное редактирование PDF с помощью DocHub

Удобное редактирование PDF

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

Удобная командная работа

Совместная работа над документами с вашей командой с помощью настольного компьютера или мобильного устройства. Позвольте другим просматривать, редактировать, комментировать и подписывать ваши документы в Интернете. Вы также можете сделать свою форму общедоступной и поделиться ее URL-адресом где угодно.

Автоматическое сохранение

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

Интеграция с Google

DocHub интегрируется с Google Workspace, поэтому вы можете импортировать, редактировать и подписывать документы прямо из Gmail, Google Диска и Dropbox. По завершении экспортируйте документы на Google Диск или импортируйте адресную книгу Google и поделитесь документом со своими контактами.

Мощные инструменты для работы с PDF на вашем мобильном устройстве

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

Безопасный обмен документами и их хранение

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

DocHub Отзывы

44 отзыва

DocHub Отзывы

23 оценки

15 005

10 000 000+

303

100 000+ пользователей

Повышайте эффективность с помощью надстройки DocHub для Google Workspace

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

Установить сейчас

Как сжать JPG до 100кб без потери качества в несколько кликов

4.7 из 5

46 голосов

этот фильм объясняет, как вы можете уменьшить размер нескольких изображений в окнах или изменить размер изображений, или мы также можем назвать это сжатием, так что здесь вы можете видеть, что есть три изображения и если я выберу все эти изображения, общий размер 80 18,2 мб, здесь вы можете увидеть количество и размер выбранного элемента, три элемента 18,2 мб внизу экрана, так как мы можем уменьшить размер этих изображений одновременно для этого что вам нужно выбрать все эти изображения, а затем щелкнуть по ним правой кнопкой мыши, затем нажать «Отправить получателю почты», чтобы сделать это, и здесь вы можете выбрать размер шесть 4800, поэтому вы хотите значительно уменьшить размер, затем вы можете выбрать это меньше, и вы можете видите, что общий предполагаемый размер будет 270 КБ, поэтому исходный размер был 18 МБ, и он будет уменьшен или 270 КБ, так что это огромная разница, тогда вам нужно нажать на прикрепить, и здесь вы увидите это диалоговое окно, с которым не связана программа электронной почты выполнить запрошенное действие, вам не нужно нажимать кнопку «ОК» сохранить это диалоговое окно

Связанные функции

Есть вопросы?

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

Свяжитесь с нами

Как щелкнуть изображение размером менее 100 КБ?

Как уменьшить размер фотографии до 100 КБ Перейдите и войдите в свою учетную запись или создайте ее, если вы новичок. Нажмите кнопку «Добавить новый», чтобы загрузить документ, который необходимо сжать; найдите файл на своем устройстве или в одном из поддерживаемых сервисов хранения.

Как уменьшить размер JPEG до 100 КБ в автономном режиме?

Как сжать JPEG до 100 КБ в автономном режиме Перейдите на веб-сайт и войдите в свою учетную запись или создайте ее, если вы новичок на платформе. Нажмите кнопку «Добавить новый» и найдите документ, который нужно сжать. Кроме того, просмотрите библиотеку для поиска нужного шаблона.

Как уменьшить размер JPEG в КБ?

Как сжать JPEG до 50 КБ онлайн Перетащите файл JPEG в программу сжатия изображений Smallpdf. Выберите вариант «Основное сжатие». На следующей странице щелкните PDF в JPG. Выберите Конвертировать целые страницы. Donedownload ваш сжатый JPEG.

Как уменьшить размер изображения ниже 100 КБ?

Как уменьшить размер образа в КБ/МБ? Чтобы уменьшить размер изображения в КБ или МБ онлайн, сначала загрузите его на веб-сайт ResizePixels. Введите желаемый размер файла и выберите соответствующую единицу измерения (КБ или МБ). Затем перейдите на страницу загрузки, чтобы получить файл изображения.

Как уменьшить размер изображения до 100 КБ на моем телефоне?

Photo Compressor Вот как вы можете использовать его для уменьшения размера фотографии. Шаг 1: Загрузите Photo Compressor на свой телефон Android, используя ссылку ниже. Шаг 2: Откройте приложение и дайте доступ к хранилищу для доступа ко всем фотографиям на телефоне. Шаг 3: Выберите «Сжать фотографии».

Как уменьшить размер файла JPG без потери качества?

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

Как уменьшить JPG до 100 КБ?

Как сжимать изображения JPG онлайн бесплатно Перейдите к инструменту сжатия. Перетащите файл JPG на панель инструментов, выберите «Основное сжатие». Хорошо конвертируйте изображение в PDF и уменьшите его. На следующей странице нажмите «Экспортировать как» и выберите «Изображение». Готово, теперь вы можете скачать сжатый JPG-файл.

Как сделать, чтобы JPEG имел меньший размер в КБ?

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

Как сделать JPEG размером менее 100 КБ?

Перейти к уменьшению размера JPG. Загрузите свой JPG и конвертируйте его в PDF. Нажмите Сжать на странице результатов. Этот инструмент уменьшит размер вашего файла JPEG.

Как сжать JPEG до 100 КБ без потери качества?

Как сжать изображения JPEG Откройте Microsoft Paint. Выберите изображение, затем используйте кнопку изменения размера. Выберите предпочтительные размеры изображения. Установите флажок «Сохранить соотношение сторон». Нажмите «ОК». Сохраните фотографию.

Узнайте, почему наши клиенты выбирают DocHub

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

«Простота, знакомство с меню и удобство для пользователя. Легко перемещаться, вносить изменения и редактировать все, что вам может понадобиться. Поскольку он используется вместе с Google, документ всегда сохраняется, поэтому вам не нужно беспокоиться об этом. .»

Пэм Дрисколл Ф.
Учитель

Подписчик ценных документов для малого бизнеса.

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