Перейти к основному содержимому

JP2

JP2 (JPEG 2000) — стандарт сжатия изображений на основе wavelet-преобразования (ISO 15444). Рекомендуется Библиотекой Конгресса США как один из предпочтительных форматов для долгосрочного хранения цифровых изображений.

Зачем нужен JP2 вместо TIFF/JPEG​

ХарактеристикаJPEGTIFFJP2
Сжатие с потерямидазависитда
Сжатие без потерьнетдада
Прогрессивная загрузканетзависитда
Большие изображения (>1 ГБ)плохосреднеда (через тайлы)
Метаданные (XMP, Exif)дадада (встроенные)
Регион интереса (ROI)нетзависитда
Открытая спецификациядадада
Поддержка браузерамиотличнаяслабаяплохая

JP2 даёт то же качество, что JPEG, при меньшем размере (на 20-30% при том же визуальном качестве), плюс возможность lossless-сжатия. Для архивов сканов и фотографий это критическое преимущество.

Версии и профили​

  • JPEG 2000 Part 1 (ISO 15444-1) — базовый, контейнер .jp2. Подмножества (профили):
    • Profile 0 — минимальный, без тайлов, без ROI. Самый совместимый.
    • Part 15 (ISO 15444-15) — профиль для PDF/A и офисных документов. Файлы с этим профилем не должны содержать тайлы больше 2048×2048.
  • JPEG 2000 Part 2 (ISO 15444-2) — расширения, контейнер .jpx (бывший JPX).
  • MJ2 (Motion JPEG 2000) — для видео. Используется редко.
  • JP3D — для 3D-изображений (медицинские применения).

Для архивов изображений рекомендуется Part 1 Profile 0 (или Part 15 для PDF/A) — максимальная совместимость с просмотрщиками.

Структура файла​

JP2 — это контейнер в формате JPEG 2000 Part 1 (ISO 15444-1). Внутри:

  1. JPEG 2000 Signature Box — обязательная сигнатура.
  2. File Type Box — тип файла, версия, бренд.
  3. JP2 Header Box — общие метаданные (размер, цветовое пространство, разрешение).
  4. Contiguous Codestream Box — собственно wavelet-сжатые данные изображения.

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

Создание JP2​

Через OpenJPEG (открытый код)​

OpenJPEG — основная открытая реализация JPEG 2000.

# Установка
apt install openjpeg-tools

# Конвертация TIFF → JP2 (lossless)
opj_compress -i input.tiff -o output.jp2 -n 0

# Конвертация с потерями (качество 90)
opj_compress -i input.tiff -o output.jp2 -r 90

# Создание тайлового JP2 для большого скана
opj_compress -i large-scan.tif -o tiled.jp2 -t 1024,1024 -n 0

Через ImageMagick (ограниченно)​

# ImageMagick поддерживает JP2, но только базовый кодек
convert input.tiff -quality 90 output.jp2

Через libvips (быстро, для больших объёмов)​

# libvips хорошо параллелит и работает с минимальной памятью
vips jpe2000save input.tiff output.jp2 --lossless --tile-size 1024

Через Grok (Python)​

from grok import compress
compress('input.tiff', 'output.jp2', lossless=True)

Валидация​

Проверка целостности кодestream​

# jp2info — заголовки
jp2info output.jp2

# opj_decompress - проверка возможности полного декодирования
opj_decompress -i output.jp2 -o /tmp/check.tif

Метаданные и PUID​

# Извлечение XMP и Exif
exiftool output.jp2

# Получение PUID через Siegfried
sf output.jp2

PUID в PRONOM: fmt/149 для JPEG 2000.

Сценарии использования в Ruarxive​

  • Сканы книг и периодики — основной формат для архивов библиотек (например, оцифрованные подшивки «Российской газеты»).
  • Сканы архивных документов из фондов РГА, ГАРФ — крупные рукописные материалы, размеченные через тайлы.
  • Снимки объектов культурного наследия — фотографии музейных предметов, требующие высокого качества и lossless-режима.
  • Карты и чертежи — для которых TIFF избыточен, а JPEG недостаточен.

Рекомендации​

  • Для lossless-архивов используйте Profile 0 с -n 0 — гарантированная попиксельная идентичность.
  • Для уменьшения размера при сохранении качества — lossy при ratio 5-10 (визуально неотличимо от lossless).
  • Включайте тайлы для изображений больше 5000×5000 — это критично для просмотра больших сканов.
  • Встраивайте метаданные (XMP Dublin Core: title, source, date, photographer) сразу при создании JP2.
  • Используйте OpenJPEG или libvips — наиболее зрелые и поддерживаемые реализации.
  • Всегда прогоняйте через opj_decompress после создания, чтобы убедиться в отсутствии повреждений.

Ресурсы​

Связанные материалы​