Формат JPEG 2000
JPEG 2000 разложил изображение не на квадраты, а на волны разного масштаба, и от этого исчез главный дефект обычного JPEG: пережатая картинка не рассыпается на плитки, а мягко мылится. Один и тот же кодек умеет и с потерями, и без них, поддерживает альфа-канал и позволяет читать файл частично — сначала грубую версию, потом детали. В вебе формат не прижился, зато в PDF для него есть свой фильтр.
Коротко о цифрах
- Стандарт
- ISO/IEC 15444, преобразование вейвлетами вместо блоков 8×8
- Режимы
- с потерями и без потерь в одном кодеке, поддерживается альфа-канал
- Фильтр в PDF
- JPXDecode — изображение хранится в документе как есть
- Декодер на сайте
- wasm-модуль на 252 032 байта, лежит рядом с воркером рендеринга
- Условие работы
- без разрешения на wasm в script-src движок падает на медленный путь
Чем вейвлет отличается от блоков
Обычный JPEG режет кадр на независимые квадраты 8×8, и при сильном сжатии границы между ними становятся видны — это и есть та самая плиточная сетка. JPEG 2000 работает со всем изображением сразу, раскладывая его на уровни детализации: сначала общий контур, затем всё более мелкие подробности. Убирая верхние уровни, кодировщик снижает резкость, но не создаёт новых границ.
Оттуда же прогрессивность: можно прочитать первые проценты файла и получить всё изображение целиком, только менее чётким. Для просмотра гигантских карт и архивных сканов это ценнее, чем экономия байтов. И один кодек покрывает оба режима — можно сжать без потерь для архива и с потерями для копии, не меняя формат.
Где вы его встретите
- Внутри PDF: в спецификации есть фильтр JPXDecode, поэтому изображение может храниться в документе прямо в этом формате.
- В цифровом кино: пакеты для кинопроекторов собираются именно на JPEG 2000.
- В архивах и медицинских системах, где нужен один формат и для точной копии, и для просмотровой.
- В вебе — практически нигде: массовой поддержки в браузерах формат так и не получил, его место заняли WebP и AVIF.
Почему у нас страницы с JPEG 2000 всё-таки рисуются
Наши клиентские инструменты не полагаются на браузер в вопросе картинок внутри PDF: движок рендеринга несёт собственный декодер JPEG 2000, скомпилированный в wasm. Он лежит в статике рядом с воркером и занимает 252 032 байта. Поэтому скан, сохранённый в JPXDecode, у нас откроется, отрисуется и превратится в JPG или PNG так же, как обычная страница.
Есть условие. В политике безопасности сайта в директиве script-src обязана стоять разрешающая запись для wasm — без неё браузер откажется компилировать модуль, и движок переключится на запасной путь на обычном JavaScript. Картинка появится, но заметно медленнее. Ровно по той же причине в списке лежат ещё два модуля: декодер двухцветных сканов на 104 852 байта и модуль управления цветом на 96 589 байт, который отвечает за корректный вывод CMYK.
Загрузить отдельный файл .jp2 в наши инструменты нельзя: браузер такие картинки не декодирует, а наши дропзоны принимают только то, что он отдаёт готовой пиксельной сеткой.
Частые вопросы
Почему браузер не открывает файл .jp2, а PDF с такой картинкой показывает?
Потому что страницу рисует не браузер, а движок рендеринга со своим декодером в wasm. Для отдельного файла этот путь не задействован, и открыть его напрямую не получается.
JPEG 2000 лучше обычного JPEG?
По качеству при сильном сжатии — да, изображение мылится вместо распада на квадраты. Но кодирование дороже, а поддержка редкая, поэтому вне архивов и кино формат почти не используют.
Чем открыть файл .jp2 на компьютере?
Понадобится программа с поддержкой этого формата: графический редактор, просмотрщик научных изображений или конвертер. Штатные средства систем и браузеры такие файлы обычно не читают.
Как превратить JPEG 2000 в обычную картинку?
Если файл лежит внутри PDF, просто выгрузите страницы в JPG или PNG нашим конвертером — декодирование произойдёт по дороге. Отдельный .jp2 придётся сначала пересохранить сторонней программой.