Почему качество JPEG 75 — это магическое число для сжатия изображений

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

1. Конвейер сжатия JPEG вкратце

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

Этап 1 — Преобразование цветового пространства: RGB → YCbCr

Исходные изображения обычно хранятся в RGB (красный, зелёный, синий), но JPEG сначала преобразует их в цветовое пространство YCbCr:

  • Y: Яркость, информация о яркости
  • Cb: Синяя цветность
  • Cr: Красная цветность

Формулы преобразования:


Y  =  0.299·R + 0.587·G + 0.114·B
Cb = -0.1687·R - 0.3313·G + 0.5·B + 128
Cr =  0.5·R - 0.4187·G - 0.0813·B + 128

Этот шаг существует потому, что глаз крайне чувствителен к изменениям яркости (он может различать тонкие различия в яркости), но относительно нечувствителен к цветности. Поэтому каналы Cb и Cr могут быть агрессивно субдискретизированы (субдискретизация цветности 4:2:0), тогда как Y сохраняется в полном разрешении. Один этот шаг обычно сокращает объём данных вдвое почти без заметных потерь.

Этап 2 — Разбиение на блоки 8×8 и сдвиг уровня

Изображение делится на блоки пикселей 8×8. Значение каждого пикселя находится в диапазоне от 0 до 255; чтобы сделать последующее вычисление DCT более чистым, из каждого значения вычитается 128, центрируя диапазон от -128 до 127.

Этап 3 — Двумерное дискретное косинусное преобразование (DCT)

Каждый блок 8×8 преобразуется с помощью двумерного DCT, перенося данные из пространственной области в частотную. Результатом является матрица коэффициентов 8×8. Верхний левый угол содержит DC-коэффициент (средняя яркость блока); при движении к нижнему правому углу AC-коэффициенты представляют всё более высокие частоты — мелкие детали, края и текстуру.

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

Этап 4 — Квантование: где происходят потери

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

Существуют две таблицы: одна для яркости, другая для цветности. Стандартная таблица яркости JPEG имеет маленькие значения в левом верхнем углу (например, 16) и большие значения в правом нижнем углу (например, 99) — это именно использует нечувствительность глаза к высоким частотам, чтобы их можно было отбрасывать более агрессивно.

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

Этап 5 — Энтропийное кодирование: сжатие без потерь

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

Полный конвейер выглядит следующим образом:

JPEG quality factor impact on compression effect: file size and quality comparison across different quality values

2. Что на самом деле контролирует коэффициент качества

Многие предполагают, что коэффициент качества (Q) — это «оценка качества» от 0 до 100. Это не так. На самом деле он контролирует масштабирование таблицы квантования.

Формула масштабирования таблицы квантования

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


If Q >= 50:
    scale = 5000 / Q
If Q < 50:
    scale = 200 - 2·Q

quant_value = floor((baseline_value × scale + 50) / 100)
quant_value = clamp(quant_value, 1, 255)   # мин 1, макс 255

Ключевые выводы из этой формулы:

  • Q = 100: scale = 50, значения квантования примерно вдвое меньше базовых, потери информации почти нет (но ошибка квантования всё равно существует, поэтому JPEG никогда не бывает по-настоящему без потерь).
  • Q = 50: scale = 100, значения квантования равны базовым — это опорная точка стандарта JPEG.
  • Q = 75: scale = 5000/75 ≈ 66.7, значения квантования составляют около 2/3 от базовых — немного свободнее, чем опорная точка.
  • Q < 50: scale превышает 100, квантование становится всё более грубым, и высокочастотные детали уничтожаются.
  • Q = 1: scale = 198, почти все высокочастотные коэффициенты обнуляются, и блочные артефакты становятся очевидными.

Почему 75 — это идеальный баланс

Ключ кроется в предельной отдаче на кривой квантования. От Q50 до Q75 размер файла резко падает, тогда как потеря визуального качества минимальна; от Q90 до Q95 размер файла раздувается, тогда как улучшение качества по существу незаметно для глаза.

Рассмотрим конкретное сравнение: используя размер Q95 как 100% базовую линию, Q75 обычно оказывается около 30%–35%, тогда как PSNR (пиковое отношение сигнал/шум) падает всего на 2–3 дБ, а SSIM (структурное сходство) — менее чем на 0.05. Другими словами, Q75 обменивает 1/3 размера файла на более чем 95% визуального качества. Это фундаментальная причина, по которой он стал значением по умолчанию — он находится прямо на границе визуально сжатия без потерь, и идти дальше расточительно.

JPEG DCT quantization process diagram: 8x8 pixel block frequency domain coefficient quantization after discrete cosine transform

Обратите внимание, где находится Q75 на графике: столбец размера упал до 32%, тогда как кривая качества всё ещё держится около 90% — это геометрический смысл «идеального баланса».

3. Измерение различных коэффициентов качества в Python

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


from PIL import Image
from io import BytesIO
import os

def compress_jpeg(img_path, quality):
    """Сжать изображение с заданным коэффициентом качества, вернуть размер в байтах."""
    img = Image.open(img_path).convert('RGB')
    buffer = BytesIO()
    img.save(buffer, format='JPEG', quality=quality, optimize=True, subsampling=2)
    return buffer.tell()

def compare_qualities(img_path):
    original_size = os.path.getsize(img_path)
    print(f"Исходный файл: {img_path}")
    print(f"Оригинальный размер: {original_size / 1024:.1f} КБ")
    print(f"{'Качество':<10}{'Размер(КБ)':<12}{'Отношение':<10}{'Экономия':<12}{'vs Q95':<10}")
    print("-" * 58)

    sizes = {}
    for q in [95, 85, 75, 65, 50, 30, 10]:
        size = compress_jpeg(img_path, q)
        sizes[q] = size
        ratio = original_size / size
        saving = (1 - size / original_size) * 100
        rel = size / sizes[95] * 100 if q != 95 else 100
        print(f"Q{q:<8}{size/1024:<12.1f}{ratio:<10.2f}{saving:<12.1f}{rel:<10.1f}")

    # Отчёт об экономии Q75 по сравнению с Q95
    if 95 in sizes and 75 in sizes:
        saved = (1 - sizes[75] / sizes[95]) * 100
        print(f"\nQ75 экономит {saved:.1f}% по сравнению с Q95")

if __name__ == '__main__':
    compare_qualities('sample.jpg')

Типичный вывод (используется пейзажное фото 4000×3000):


Исходный файл: sample.jpg
Оригинальный размер: 5823.4 КБ
Качество  Размер(КБ)  Отношение  Экономия    vs Q95
----------------------------------------------------------
Q95       1245.8      4.67       78.6%       100.0
Q85       722.5       8.06       87.6%       58.0
Q75       398.7       14.61      93.2%       32.0
Q65       274.2       21.24      95.3%       22.0
Q50       186.9       31.16      96.8%       15.0
Q30       99.5        58.52      98.3%       8.0
Q10       49.8        116.91     99.1%       4.0

Q75 экономит 68.0% по сравнению с Q95

Цифры подтверждают ранее сделанный вывод: Q75 сокращает примерно 68% размера по сравнению с Q95, тогда как два изображения практически неотличимы при обычном расстоянии просмотра на экране.

4. Сравнение распространённых форматов изображений

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

ФорматСжатиеПрозрачностьАнимацияТипичное отношениеЛучший вариант использования
JPEGС потерями (DCT)НетНетСредне-высокоеФотографии, изображения с естественными цветами, веб-миниатюры
PNGБез потерь (DEFLATE)Да (8бит/16бит)НетНизкоеИконки, элементы интерфейса, скриншоты текста, прозрачность
WebPС потерями + Без потерьДаДаВысокое (на 25%–35% меньше, чем JPEG)Современные фотографии, замена анимации, минимальный размер
TIFFБез потерь / С потерями (опционально)ДаНетНизкоеПечать, сканирование, профессиональное архивирование
BMPБез сжатияНетНетОчень низкое (сырые пиксели)Не рекомендуется, только устаревшее

Несколько замечаний:

  • JPEG не поддерживает прозрачность: его главный недостаток. Иконкам, которым нужен прозрачный фон, следует использовать PNG или WebP.
  • PNG — это «тяжеловес» без потерь: идеальное качество, но большие файлы — фотография 4000×3000, сохранённая как PNG, может превышать 20 МБ.
  • WebP — самый сильный конкурент JPEG: в режиме с потерями он на 25%–35% меньше, чем JPEG при эквивалентном качестве, с поддержкой прозрачности и анимации. Его слабость — неполная поддержка в старых браузерах и некоторых цепочках инструментов.
  • TIFF/BMP не подходят для веба: они принадлежат профессиональным рабочим процессам или существуют как устаревшие форматы.

5. Разрешение и коэффициент качества работают вместе

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

Двухэтапная стратегия

Оригинальное фото 4000×3000 (примерно 12 мегапикселей), сохранённое напрямую как JPEG при Q95, может превышать 4 МБ. Но экрану обычно нужно только 1920×1080 (около 2 мегапикселей), поэтому существует огромный избыток.

Двухэтапная оптимизация:

  1. Шаг 1 — Снизить разрешение. Масштабирование с 4000×3000 до 1920×1080 уменьшает количество пикселей с 12M до 2M, сокращение примерно на 83%. Поскольку размер JPEG примерно пропорционален количеству пикселей, этот шаг один удаляет около 75%–83% байтов.
  2. Шаг 2 — Настроить коэффициент качества. При новом разрешении снизьте Q95 до Q75. Поскольку уменьшение масштаба уже сгладило большую часть высокочастотных деталей, блочные артефакты Q75 почти невидимы при этом разрешении, что удаляет ещё около 50% байтов.

В комбинации итоговый размер составляет около 8%–10% от оригинала. Исходное изображение 4 МБ можно уменьшить до 300–400 КБ с впечатлением от просмотра на экране, которое по существу без потерь.

JPEG quality factor vs file size/quality relationship curve: quality trend from 10 to 100

Здесь существует важное правило порядка: сначала снизьте разрешение, затем снизьте коэффициент качества. Если делать наоборот (сначала сжать качество, затем масштабировать), масштабер будет усиливать блочные артефакты JPEG, делая результат хуже.

6. Дерево решений по выбору формата

Когда у вас есть изображение, какой формат выбрать? Это дерево решений даёт быстрый ответ:

Visual quality comparison at different JPEG quality levels: quality=10/30/50/70/90 visual differences

Кратко: фотографии идут в JPEG или WebP, иконки и текст — в PNG, а всё, чему нужна прозрачность, должно избегать JPEG.

7. FAQ: Три распространённых вопроса

Q1: Почему Q75 считается «лучшим» коэффициентом качества?

Потому что кривая квантования имеет точку перегиба именно здесь. Q75 соответствует масштабу около 66.7, сжимая таблицу квантования примерно до 2/3 от базовой. В этот момент низкочастотные коэффициенты, к которым глаз наиболее чувствителен, сохраняются почти нетронутыми, тогда как визуально неважные высокочастотные коэффициенты начинают разумно отбрасываться. Повышение до Q85 или Q95 раздувает размер файла гораздо быстрее, чем улучшает качество; снижение до Q60 или Q50 делает блочные артефакты и звон видимыми. Q75 находится прямо в зоне, где размер падает быстро, а качество — медленно, поэтому он так широко используется по умолчанию. Отметим, что «лучший» относителен к отображению на веб-экране — профессиональная печать или архивирование могут потребовать Q90 или выше.

Q2: Может ли WebP полностью заменить JPEG?

По эффективности сжатия lossy-режим WebP на 25%–35% меньше, чем JPEG при эквивалентном SSIM, и он поддерживает прозрачность и анимацию, поэтому технически он превосходит JPEG. Но «полная замена» всё ещё невозможна по трём причинам. Во-первых, некоторые старые браузеры и библиотеки обработки изображений не полностью поддерживают WebP. Во-вторых, кодирование WebP было медленнее, чем JPEG, в ранних реализациях (хотя современные библиотеки в значительной степени закрыли этот разрыв). В-третьих, JPEG имеет 30 лет насыщения экосистемы — вывод камер, CMS-платформы, вложения электронной почты — всё безупречно поддерживает его. Распространённая инженерная практика — выводить обе версии, JPEG и WebP, и позволить браузеру выбирать через тег <picture>.

Q3: Что произойдёт, если одно и то же изображение многократно сжимать как JPEG?

Искажения накапливаются, и это необратимо. Каждое сжатие JPEG заново выполняет квантование и DCT; блочные артефакты и звон, внесённые предыдущим проходом, рассматриваются как «содержимое изображения» и квантуются снова, поэтому артефакты становятся всё более заметными, а качество деградирует ступенчато. Это явление называется «потерей поколений» (generation loss). Решение — сохранять мастер-копию без потерь (PNG/TIFF или JPEG при Q100) и выводить каждый вариант из этой мастер-копии — никогда не сжимать уже сжатый JPEG. Если многократные правки неизбежны, сохраняйте рабочие версии в промежуточном формате без потерь (PSD, TIFF) и сжимайте в JPEG только при финальном выводе.

8. Резюме и шпаргалка по параметрам

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

Поняв принципы, выбор параметров перестаёт быть угадыванием. Эта шпаргалка для повседневного использования:

СценарийРекомендуемый форматКоэффициент качестваРазрешениеОжидаемый размер
Изображение для веб-статьи (фото)JPEG75–80Длинная сторона ≤ 1920px200–400 КБ
Веб-миниатюраJPEG70Длинная сторона ≤ 400px15–40 КБ
Иконка / элемент интерфейсаPNGОригинальноеВарьируется
Скриншот текстаPNGОригинальноеВарьируется
Прозрачный фонWebP / PNGОригинальное
Архив фото высокого разрешенияJPEG90–95Оригинальное2–5 МБ
Вывод на печатьTIFF / PNG≥ 300 DPIНеограниченно
Современный сайт, минимальный размерWebP75–80Длинная сторона ≤ 1920px150–300 КБ

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

Связанные статьи:

Нужно сжать файлы? Попробуйте SmartSlim

На базе собственного движка сжатия на Rust поддерживается 10 основных категорий и 40+ форматов, включая PDF/изображения/видео/Office/OFD. Локальная обработка — данные не покидают вашу инфраструктуру.