LibRaw

LibRaw

Последняя версия: 0.21
Скачали: 109

LibRaw — RAW-декодер для чтения файлов цифровых камер, извлечения пиксельных RAW-данных, технических метаданных и встроенных миниатюр. Это не фоторедактор с окнами, ползунками экспозиции и каталогом снимков, а библиотека C/C++ и набор консольных утилит, которые используют программы для просмотра, анализа, конвертации и предварительной обработки RAW-файлов. В LibRaw основная работа идёт не через кнопку Open в графическом интерфейсе, а через вызовы API, команды raw-identify, simple_dcraw, dcraw_emu, 4channels, unprocessed_raw и другие инструменты из комплекта.

Главная задача LibRaw — дать программе единый способ работать с множеством камерных RAW-форматов. RAW-экосистема фрагментирована: Canon использует CR2 и CR3, Nikon — NEF и NRW, Sony — ARW, Fujifilm — RAF, многие камеры и смартфоны пишут DNG. Для обычного пользователя эти расширения выглядят как варианты одного типа файла, но для разработчика это разные контейнеры, разные структуры метаданных, разные варианты сжатия и разные правила извлечения сенсорных данных. LibRaw закрывает именно этот слой: открывает файл, определяет формат, извлекает данные и передаёт их приложению, которое уже решает, как показывать, конвертировать или анализировать изображение.

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

  • определить модель камеры и параметры RAW-файла;

  • получить размер кадра, геометрию активной области, CFA/Bayer pattern, black level и данные баланса белого;

  • извлечь embedded preview или thumbnail без полной проявки RAW;

  • распаковать RAW-данные для последующей обработки;

  • выполнить базовую конвертацию в PPM или TIFF через примеры, совместимые по логике с dcraw;

  • разложить RAW на отдельные каналы для анализа сенсора;

  • измерить скорость этапов обработки через postprocessing_benchmark;

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

В обзоре LibRaw важно не сравнивать её напрямую с Lightroom, Capture One, RawTherapee или darktable как с равными по типу программами. Эти приложения дают визуальную проявку, библиотеку снимков, историю правок, цветовые модули, профили и экспорт. LibRaw решает более низкоуровневую задачу: читает RAW и отдаёт данные дальше. Поэтому программа особенно важна для разработчиков, технических специалистов, авторов просмотрщиков и пользователей, которым нужен контролируемый вывод через командную строку.

Краткая карточка LibRaw

ПараметрЗначение
НазначениеЧтение RAW-файлов цифровых камер, извлечение RAW-данных, метаданных и embedded preview
Тип программыБиблиотека C/C++ и консольные утилиты
Основные инструментыraw-identify, simple_dcraw, dcraw_half, dcraw_emu, 4channels, unprocessed_raw, postprocessing_benchmark
ИнтерфейсAPI и командная строка
Форматы и камерыCRW/CR2/CR3, NEF/NRW/NEFX, RAF, DNG, MOS, KDC, DCR, ARW и другие RAW-форматы камер
ЛицензииGNU LGPL 2.1 и CDDL 1.0
Целевая аудиторияРазработчики, фотографы с опытом терминала, специалисты по RAW-анализу, авторы графического ПО
Что не заменяетПолноценный RAW-редактор с визуальной цветокоррекцией, каталогом и ручной художественной проявкой

LibRaw удобно рассматривать как движок для чтения RAW. Внутри программы нет отдельного окна с вкладками Library, Develop, Export или панели цветокоррекции. Пользователь взаимодействует с ней через исполняемые файлы в папке bin/, а разработчик — через класс LibRaw, структуру imgdata, функции open_file(), unpack(), unpack_thumb(), dcraw_process(), dcraw_ppm_tiff_writer() и dcraw_thumb_writer(). В API основной объект обработки создаётся как экземпляр класса LibRaw; один объект одновременно работает с одним источником данных, но приложение может последовательно обрабатывать любое количество файлов или создавать несколько процессоров в разных потоках.

По лицензированию LibRaw удобна для разных типов проектов: GNU LGPL 2.1 и CDDL 1.0 позволяют выбирать подходящий режим использования библиотеки. Для пользователя, который запускает готовую утилиту из командной строки, это второстепенно. Для разработчика, который встраивает LibRaw в собственный RAW-конвертер, просмотрщик или коммерческую программу, лицензия становится частью технического задания и юридической проверки.

Как устроена LibRaw

Библиотека, API и демонстрационные утилиты

LibRaw состоит из двух практических уровней. Первый — библиотека, которую подключают к приложению. Второй — набор примеров, которые после сборки оказываются в папке bin/ и показывают, как применять API. Исходные файлы этих примеров лежат в samples/, поэтому их можно использовать как учебные заготовки: посмотреть, как открыть RAW, вывести метаданные, распаковать миниатюру, записать TIFF, обработать файл через буфер памяти или измерить производительность.

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

  • raw-identify -v — подробный вывод метаданных;

  • raw-identify -u — вывод имени функции распаковки;

  • raw-identify -w — вывод таблиц баланса белого, сохранённых в RAW;

  • dcraw_emu -timing — подробный вывод времени этапов обработки;

  • dcraw_emu -G — режим green_matching для подавления цветных лабиринтов на камерах с разными зелёными каналами;

  • dcraw_emu -B x y w h — кадрирование результата по прямоугольнику;

  • dcraw_emu -aexpo e p — коррекция экспозиции с параметрами сдвига и сохранения светов;

  • 4channels -s N — выбор N-го изображения в RAW с несколькими изображениями;

  • 4channels -g — гамма-коррекция;

  • 4channels -A — автоматическое масштабирование целочисленным множителем.

Эта схема делает LibRaw полезной для автоматизации. Например, пакетная система может пройти по папке с NEF, CR3 или ARW, через raw-identify проверить тип файла и параметры камеры, через unpack_thumb() извлечь превью для быстрой галереи, а затем передать выбранные RAW-файлы в собственный модуль обработки. Графическая программа при этом может вообще не показывать пользователю LibRaw: библиотека работает внутри, а в интерфейсе приложения отображаются привычные миниатюры, шкалы, рейтинги и кнопки экспорта.

Что извлекает LibRaw из RAW-файла

LibRaw получает из файла три группы данных. Первая — RAW data, то есть пиксельные значения, записанные камерой. Вторая — метаданные, без которых корректная последующая обработка невозможна: геометрия кадра, CFA/Bayer pattern, black level, white balance и другие параметры. Третья — embedded preview или thumbnail, то есть готовое встроенное изображение, которое камера сохраняет внутри RAW для быстрого просмотра.

Для фотографа встроенная миниатюра важна в сценариях отбора. Полная RAW-проявка требует распаковки, интерполяции, применения баланса белого, цветового преобразования и записи результата. Embedded preview извлекается быстрее, потому что это уже готовое изображение внутри файла. Для каталогизатора это означает быстрый экран предпросмотра. Для технического анализатора ценнее не preview, а данные imgdata.rawdata и параметры сенсора. Для разработчика RAW-конвертера важна вся цепочка: сначала open_file() читает метаданные, затем unpack() распаковывает RAW, затем приложение выбирает собственный способ демозаики, нормализации, цветовой обработки и вывода.

LibRaw скриншот 1

Структура imgdata — центральное место, куда LibRaw складывает результаты чтения. В C++ API после открытия datastream заполняются imgdata.idata, imgdata.sizes, imgdata.color, imgdata.other и imgdata.thumbnail. Такой подход удобен тем, что приложение получает не только пиксели, но и технический контекст: без размеров активной области, цветового фильтра и уровней чёрного RAW-данные нельзя корректно интерпретировать.

Поддерживаемые камеры и RAW-форматы

LibRaw читает RAW-файлы цифровых камер разных производителей: Canon, Nikon, Sony, Fujifilm, Panasonic, Olympus/OM System, Leica, Hasselblad, Pentax, DJI, GoPro, Apple, Google Pixel и многих других устройств. В списке поддерживаемых камер есть отдельные секции для Canon EOS R-серии, Fujifilm X/GFX, DJI Mavic, GoPro HERO, Leica Q/M/SL, Hasselblad X/CFV/H, смартфонов Apple и Google, а также старых и редких камер. Поддержка LibRaw 0.22 указана для сборки со всеми возможностями; это важная деталь для программ, которые включают не все внешние компоненты.

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

К распространённым форматам, с которыми связана LibRaw, относятся:

Производитель или группаПримеры RAW-форматовПрактический смысл
CanonCRW, CR2, CR3Файлы зеркальных, беззеркальных и компактных камер Canon
NikonNEF, NRW, NEFXRAW Nikon, включая отдельные режимы Pixel Shift в новых ветках
SonyARW, SR2, Sony YCC pseudo-RAWRAW и специальные варианты сжатия Sony
FujifilmRAFФайлы камер X-серии и GFX
Adobe и DNG-устройстваDNGОткрытый контейнер, используемый камерами, смартфонами и конвертерами
Hasselblad / Leaf / Mamiya3FR, MOS и другиеСреднеформатные и цифровые задники
DJI / GoPro / смартфоныDNG и собственные вариантыRAW с дронов, экшн-камер и мобильных устройств

В ветке 0.22 расширены поддержка Panasonic encoding 8, Sony YCC Medium/Small compression pseudo-RAW, DNG 1.7 с JPEG-XL через Adobe DNG SDK, embedded RAW в Canon CRN, Samsung V3 decoder, 14-bit high-resolution файлы OM System и Nikon NEFX. Для списка камер в этой ветке указано 1284 поддерживаемые камеры при сборке со всеми функциями.

Интерфейс и рабочий процесс

Почему у LibRaw нет привычного окна с кнопками

LibRaw работает как инструмент для разработчиков и опытных пользователей командной строки. У неё нет собственной панели Файл, окна Настройки экспорта, кнопки Сохранить как или визуального модуля цветокоррекции. Интерфейс LibRaw — это набор консольных программ и API. В таком формате точность важнее визуального удобства: команда должна принять RAW-файл, выполнить конкретную операцию и вернуть результат или диагностический вывод.

Это не недостаток для целевой аудитории. Разработчику графического просмотрщика не нужен ещё один редактор поверх собственного интерфейса; ему нужен стабильный RAW-декодер. Автору пакетной обработки не нужна ручная работа с каждым снимком; ему нужны команды, которые можно запускать из скрипта. Исследователю RAW-данных не нужен красивый пресет, ему нужны реальные значения каналов, black level, white balance, размеры активной области и возможность извлечь данные без лишней художественной обработки.

Основные утилиты в комплекте

raw-identify — диагностическая утилита для чтения структуры imgdata после open_file(). Она не выполняет полноценную проявку, а показывает, что LibRaw распознала в файле. Параметр -v выводит расширенный дамп метаданных, -u показывает имя функции распаковки, -u -f добавляет данные по masked area sizes, а -w печатает таблицы баланса белого из RAW-файла.

simple_dcraw — простой пример эмуляции поведения dcraw для сценариев [-e] [-v] [-T]. Он полезен как учебный путь: открыть файл, распаковать изображение, извлечь thumbnail и записать результат. В официальном примере видна типичная последовательность: создание LibRaw RawProcessor, вызов open_file(), затем unpack(), unpack_thumb(), dcraw_thumb_writer() и dcraw_process().

dcraw_half демонстрирует C API и эмулирует dcraw -h. Этот пример показывает, как работать с LibRaw без C++-класса, что важно для программ на C и для обёрток к другим языкам.

dcraw_emu — наиболее заметная утилита для пользователя, который хочет конвертировать RAW через командную строку. Она почти полностью повторяет логику dcraw, но добавляет собственные параметры LibRaw: -mmap, -mem, -timing, -G, -B x y w h, -aexpo e p, -dcbi N, -dcbe, -disars, -disinterp, -apentax4shot и другие.

4channels разбивает RAW-файл на четыре отдельных 16-битных grayscale TIFF по каналам. Такой вывод нужен не для обычной публикации фотографии, а для технической работы: анализа каналов, проверки поведения сенсора, изучения интерполяции, оценки шумов и поиска проблем в данных.

unprocessed_raw извлекает почти неизменённые RAW-данные, включая masked pixels на поддерживаемых камерах. Параметры -q, -A, -g и -B управляют тихим режимом, автомасштабированием, гамма-коррекцией и вычитанием black level.

postprocessing_benchmark печатает время этапов RAW-обработки. Этот пример используется и в OpenBenchmarking/Phoronix Test Suite: профиль LibRaw запускает postprocessing_benchmark и измеряет результат в Mpix/sec.

Возможности LibRaw

Чтение RAW-файлов

Основной сценарий начинается с открытия файла. В C++ API за это отвечает LibRaw::open_file(const char *filename[, INT64 bigfile_size]); для Win32 есть вариант с wchar_t. Функция создаёт файловый datastream, читает метаданные и заполняет структуры внутри imgdata. Для работы не с файлом, а с уже загруженным блоком памяти применяется open_buffer(void *buffer, size_t bufsize). Для собственных потоков ввода используется open_datastream(LibRaw_abstract_datastream *stream).

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

После open_file() приложение получает метаданные, но ещё не обязательно имеет распакованные пиксельные данные. Для распаковки используется unpack(). Для встроенного preview — unpack_thumb(). После работы recycle() освобождает ресурсы и готовит объект к следующему файлу; при последовательной пакетной обработке следующий open_file() также вызывает очистку.

Извлечение метаданных

Метаданные — одна из сильных сторон LibRaw. Программа извлекает не только название камеры и размеры кадра, а технические параметры, без которых RAW-конвертер не сможет корректно интерпретировать данные. В imgdata попадают размеры, цветовая структура, таблицы баланса белого, thumbnail, сведения о кадре и другие поля. raw-identify -v показывает расширенный набор таких данных, поэтому утилита полезна при диагностике конкретного файла.

Для разработчика это экономит время на разбор множества проприетарных структур. Вместо отдельного парсера под каждый формат можно использовать общий слой LibRaw и обрабатывать унифицированные поля. Для пользователя командной строки raw-identify становится способом быстро понять, распознан ли файл, какая камера определена и какие технические данные доступны.

Извлечение embedded preview и thumbnail

Многие RAW-файлы содержат готовое превью. LibRaw умеет распаковывать thumbnail через unpack_thumb() и записывать его через dcraw_thumb_writer(). В примере simple_dcraw.cpp имя выходного файла формируется с расширением .thumb.jpg или .thumb.ppm в зависимости от формата встроенной миниатюры.

Этот сценарий нужен в просмотрщиках и каталогизаторах. Быстрый показ embedded preview позволяет открыть папку с сотнями RAW-файлов без полной конвертации каждого кадра. Важно понимать ограничение: embedded preview — это не самостоятельная проявка LibRaw, а изображение, уже сохранённое камерой внутри RAW. Оно удобно для навигации и отбора, но не заменяет точную обработку исходных сенсорных данных.

Базовая конвертация RAW

LibRaw включает функции, эмулирующие поведение dcraw: dcraw_process(), dcraw_ppm_tiff_writer(), dcraw_make_mem_image() и связанные методы. Через simple_dcraw и dcraw_emu можно получить PPM или TIFF, применить баланс белого, выбрать режим обработки, включить half-size output, задать экспокоррекцию, отключить интерполяцию или вывести время этапов.

При этом LibRaw не является полноценным художественным RAW-конвертером. Развитие библиотеки сосредоточено на поддержке новых камер и форматов, извлечении метаданных и интерфейсе чтения RAW. Встроенная базовая конвертация сохранена для совместимости, тестирования и случаев, где проявка не является главной функцией приложения. Production-quality rendering не входит в основную область LibRaw.

В обзоре программы это принципиальная граница. LibRaw RAW-конвертация подходит для технического вывода, проверки, автоматизации и простых сценариев. Для тонкой цветокоррекции, локальных масок, профилей камер, шумоподавления, резкости и художественной проявки лучше использовать специализированный редактор: GIMP, XnView MP, IrfanView, FastStone Image Viewer или Adobe Photoshop Lightroom, если нужен визуальный рабочий процесс. Внутренние ссылки на смежные материалы взяты из карты сайта проекта.

Работа с каналами RAW

Утилита 4channels создаёт четыре отдельных 16-битных grayscale TIFF-файла по каналам RAW. Это не типичный пользовательский экспорт, а инструмент технического анализа. Фотографу, которому нужен JPEG для публикации, такой результат бесполезен. Исследователю сенсорных данных он помогает увидеть, как распределяются значения по каналам, где появляются аномалии и как данные выглядят до демозаики.

Параметры 4channels позволяют выбрать изображение внутри RAW с несколькими изображениями, применить гамму, автомасштабирование, отключить вычитание black level или отказаться от RAW curve. Такой набор указывает на назначение утилиты: контроль исходных данных, а не финальная обработка фотографии.

Производительность и диагностика

LibRaw содержит postprocessing_benchmark, который печатает время этапов RAW-обработки. В профиле OpenBenchmarking LibRaw запускается именно этот инструмент, а результат выражается в Mpix/sec. Это позволяет использовать LibRaw не только как библиотеку, но и как нагрузку для оценки CPU при RAW-постобработке.

В dcraw_emu параметр -timing включает подробный вывод времени. Для разработчика это удобно при сравнении сборок, включении OpenMP, проверке обработки разных форматов и поиске узких мест. Для корректного сравнения нужно использовать одинаковые файлы, одинаковые параметры обработки и одинаковую конфигурацию сборки. Разница между CR3, DNG, NEF, RAF и ARW может быть связана не только с производительностью процессора, но и с форматом сжатия, количеством пикселей, встроенными метаданными и выбранным декодером.

LibRaw скриншот 2

Инструкция: как использовать LibRaw на практике

Подготовка рабочего окружения

LibRaw не требует привычной установки в стиле графической программы с мастером Next — Next — Finish. Рабочий вариант зависит от ОС и цели. Для разработки библиотеку компилируют и подключают к проекту. Для консольной работы используют готовые исполняемые файлы или собирают примеры из исходников. После сборки примеры оказываются в папке bin/, а исходники примеров лежат в samples/.

Минимальный практический набор для знакомства:

  1. папка с исполняемыми файлами LibRaw;

  2. RAW-файл камеры, например .CR3, .CR2, .NEF, .ARW, .RAF или .DNG;

  3. терминал Windows, Linux или macOS;

  4. понимание, какой результат нужен: метаданные, thumbnail, TIFF/PPM, разбор каналов или тест скорости.

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

Как получить информацию о RAW-файле через raw-identify

Для первичной диагностики используется raw-identify. Команда открывает RAW и выводит сведения, которые LibRaw смогла прочитать. Базовый сценарий выглядит так:

raw-identify photo.CR3

Для расширенного вывода применяется параметр -v:

raw-identify -v photo.CR3

Этот режим полезен, когда нужно понять, как LibRaw определяет камеру, какие размеры видит в файле, какие поля доступны и какие данные попадут в imgdata. Для просмотра функции распаковки используется:

raw-identify -u photo.CR3

Для вывода таблиц баланса белого из RAW-файла:

raw-identify -w photo.CR3

При анализе проблемного файла raw-identify обычно запускают до конвертации. Так проще отделить две ситуации: файл не распознан на этапе открытия или он открывается, но проблема возникает при распаковке, обработке thumbnail либо записи результата.

Как конвертировать RAW через dcraw_emu

dcraw_emu нужен, когда требуется получить результат, близкий по логике к dcraw, но на базе LibRaw. Базовая команда:

dcraw_emu photo.NEF

Для вывода TIFF применяется параметр -T:

dcraw_emu -T photo.NEF

Для использования баланса белого камеры:

dcraw_emu -T -w photo.NEF

Для подробного вывода времени этапов:

dcraw_emu -T -w -timing photo.NEF

Для кадрирования результата по прямоугольнику используется -B x y w h, где x и y — координаты левого верхнего угла, w — ширина, h — высота. Координаты применяются до поворота изображения:

dcraw_emu -T -B 100 100 1200 800 photo.ARW

Для экспокоррекции используется -aexpo e p. Параметр e задаёт сдвиг экспозиции в линейной шкале от 0.25 до 8.0, а p управляет сохранением светов от 0.0 до 1.0:

dcraw_emu -T -aexpo 1.5 0.5 photo.RAF

Для подавления цветных лабиринтов на камерах с разными зелёными каналами включается -G:

dcraw_emu -T -G photo.DNG

Для отключения интерполяции используется -disinterp:

dcraw_emu -T -disinterp photo.CR2

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

Как извлечь миниатюру

Для извлечения встроенного thumbnail подходит пример simple_dcraw с режимами, унаследованными от dcraw. В API эта операция строится через unpack_thumb() и dcraw_thumb_writer(). В типичном процессе сначала открывается файл, затем распаковывается миниатюра, после чего она записывается как .thumb.jpg или .thumb.ppm, если thumbnail успешно прочитан.

Пример логики:

LibRaw RawProcessor;RawProcessor.open_file("photo.CR3");RawProcessor.unpack_thumb();RawProcessor.dcraw_thumb_writer("photo.CR3.thumb.jpg");RawProcessor.recycle();

Сценарий полезен для галерей, файловых менеджеров, систем отбора, веб-интерфейсов и архивных каталогов. Извлечение preview не требует полной RAW-проявки, поэтому быстрее подходит для первого просмотра. Для финального изображения нужно использовать распаковку RAW и полноценный этап обработки.

Как использовать LibRaw в собственном приложении

Минимальная последовательность в C++ выглядит так:

#include "libraw/libraw.h"int process_image(const char *file){    LibRaw processor;    int ret = processor.open_file(file);    if (ret != LIBRAW_SUCCESS)    {        processor.recycle();        return ret;    }    ret = processor.unpack();    if (ret != LIBRAW_SUCCESS && LIBRAW_FATAL_ERROR(ret))    {        processor.recycle();        return ret;    }    ret = processor.unpack_thumb();    if (ret == LIBRAW_SUCCESS)    {        processor.dcraw_thumb_writer("preview.jpg");    }    ret = processor.dcraw_process();    if (ret == LIBRAW_SUCCESS)    {        processor.dcraw_ppm_tiff_writer("output.tiff");    }    processor.recycle();    return ret;}

В реальном приложении обработка ошибок должна быть строже: нужно проверять коды возврата, отличать фатальные ошибки от нефатальных, контролировать память, учитывать размер RAW и настраивать параметры imgdata.params. API LibRaw возвращает integer-коды, а для текстового описания ошибок доступны LibRaw::strerror() и связанные функции.

Если приложение работает с файлами из недоверенного источника, важны ограничения памяти, проверки размеров и аккуратная конфигурация сборки. RAW-файл может быть очень большим, повреждённым или специально подготовленным для проверки устойчивости декодера. В истории LibRaw отдельное внимание уделялось исправлениям переполнений, проверкам размеров, CR3 parser, X3F decoder, DNG loader и Sony YCC decoder.

Плюсы и минусы LibRaw

Плюсы:

LibRaw скриншот 3

  • LibRaw закрывает сложный слой чтения RAW-форматов и избавляет приложение от необходимости писать отдельный парсер под каждую камеру.

  • Библиотека извлекает не только пиксельные значения, но и данные, необходимые для обработки: геометрию, CFA/Bayer pattern, black level, white balance и embedded preview.

  • В комплекте есть практические примеры: raw-identify, simple_dcraw, dcraw_emu, 4channels, unprocessed_raw, postprocessing_benchmark.

  • API поддерживает работу с файлом, буфером памяти и абстрактным datastream.

  • Лицензии GNU LGPL 2.1 и CDDL 1.0 дают разработчику выбор модели интеграции.

  • Список поддерживаемых камер охватывает массовые DSLR, mirrorless, компактные камеры, средний формат, дроны, экшн-камеры и смартфоны.

  • dcraw_emu помогает получить технический TIFF/PPM-вывод без написания собственного конвертера.

  • unpack_thumb() и dcraw_thumb_writer() подходят для быстрого предпросмотра и каталогизации.

  • 4channels и unprocessed_raw полезны для анализа исходных сенсорных данных, а не только для просмотра фотографии.

  • postprocessing_benchmark позволяет использовать LibRaw в измеримых тестах RAW-обработки.

Минусы:

  • У LibRaw нет собственного графического интерфейса для обычной ручной проявки.

  • Программа не заменяет Lightroom, darktable, RawTherapee или Capture One при художественной обработке.

  • Для уверенной работы нужны командная строка, понимание RAW-параметров или навыки C/C++.

  • Поддержка конкретной камеры в стороннем приложении зависит от того, какую сборку LibRaw встроил разработчик этого приложения.

  • Встроенная конвертация основана на совместимости с dcraw и не является основным направлением развития библиотеки.

  • Часть возможностей зависит от сборочных параметров и внешних библиотек.

  • Для публичных сервисов, принимающих неизвестные RAW-файлы, требуется дополнительная осторожность: повреждённые и специально подготовленные файлы должны обрабатываться в изолированной и проверенной среде.

  • В Windows-сценариях разработчику приходится вручную учитывать DLL, include-файлы и пути к библиотекам.

Системные требования

LibRaw распространяется как исходный код, который компилируется под нужную платформу. Для Unix-систем, включая FreeBSD, Linux и Mac OS X, нужен рабочий C++-компилятор и make; в документации указаны gcc 3+ и clang 2+. Дополнительные библиотеки используются по необходимости: zlib для deflated DNG, libjasper для RED-файлов, libjpeg8 для lossy DNG и ряда старых камер Kodak.

ПлатформаТребования и особенности
Linux / FreeBSD / macOSC++-компилятор, make, сборка через ./configure и make
Unix 32/64-bitПроверялась работа на x86- и AMD64-совместимых процессорах
Windows через CygwinСборка аналогична Unix-сценарию
Windows nativeРаспаковка архива, настройка среды компилятора, запуск nmake -f Makefile.msvc
Дополнительные компонентыzlib, libjasper, libjpeg8, LCMS, OpenMP — в зависимости от задач и параметров сборки
Результат сборки Unixlibraw.a, libraw_r.a, примеры в bin/
Результат сборки Windowslibraw_static.lib, bin/libraw.dll, lib/libraw.lib, примеры в bin/

В Unix-сборке на выходе появляются libraw.a и libraw_r.a; первая обозначена как non-thread-safe, вторая — thread-safe. После make install библиотеки размещаются в /usr/local/lib, include-файлы — в /usr/local/include/libraw, а примеры — в /usr/local/bin. Для подключения в собственном проекте используются параметры компилятора -I/usr/local/include, -L/usr/local/lib, -lraw или -lraw_r.

В Windows native-сборке создаются libraw_static.lib, bin/libraw.dll, lib/libraw.lib и примеры в bin/. Все примеры связаны с динамической библиотекой; при статической линковке приложение связывают с libraw_static.lib и задают /DLIBRAW_NODLL. Отдельного установщика для Windows-сценария в документации не предусмотрено: DLL и связанные файлы обычно поставляются вместе с программой, которая использует LibRaw.

Указывать минимальные RAM, место на диске и конкретный процессор для обычного пользователя некорректно: требования зависят от размера RAW-файлов, режима обработки, количества параллельных задач, внешних библиотек и приложения, которое встроило LibRaw. Для серверной обработки важнее ограничение памяти, проверка входных файлов, контроль размера DNG/CR3/X3F и изоляция процесса.

Сравнение с аналогами

LibRaw корректнее сравнивать не только с RAW-редакторами, но и с библиотеками и утилитами, которые решают смежные задачи. В одном ряду здесь оказываются разные типы программ: библиотека, SDK, консольный конвертер, графический RAW-процессор и универсальный пакет обработки изображений. Сравнение показывает, где LibRaw выигрывает, а где лучше выбрать другую программу.

ПрограммаТипДля чего подходитСильная сторонаОграничение
LibRawБиблиотека и консольные утилитыВстраивание RAW-чтения, извлечение метаданных, thumbnail, техническая конвертацияЕдиный слой чтения множества RAW-форматовНет собственного GUI и полноценной художественной проявки
dcrawКонсольный RAW-конвертерПростая командная конвертация и историческая совместимостьЛаконичная модель работы, база для многих проектовПоддержка новых камер прекратилась; LibRaw продолжила развитие RAW-поддержки
Adobe DNG SDKSDK для DNGЧтение, запись и обработка DNGСильная сторона — именно DNG и связанные сценарииНе является универсальным декодером всех камерных RAW
RawTherapeeГрафический RAW-процессорРучная проявка RAW, настройка цвета, экспорта и параметров изображенияКроссплатформенная визуальная обработка RAW под GPLv3Не предназначен как простой встраиваемый RAW API для сторонних приложений
darktableФото workflow и RAW developerКаталог, lighttable, darkroom, non-destructive editingПолный фотографический рабочий процесс и 32-bit floating point pipelineЭто приложение для фотографа, а не библиотека чтения RAW для разработчика
ImageMagickУниверсальная консольная обработка изображенийМассовые операции с большим числом форматовСильная автоматизация через командыRAW-поведение зависит от делегатов и сборки
Adobe DNG ConverterКонвертер в DNGПеревод камерных RAW в DNGУнификация формата для дальнейшего workflowНе решает задачу встраивания универсального RAW-декодера в приложение

RawTherapee — выбор для пользователя, который хочет открыть RAW и вручную довести фотографию до результата: экспозиция, цвет, детали, шумоподавление, резкость, профиль и экспорт. RawTherapee описывается как кроссплатформенная программа для обработки RAW, выпущенная как Free Software под GPLv3; она ориентирована на пользователей от энтузиастов до профессиональных фотографов.

darktable подходит тем, кому нужен полный фотографический workflow: база цифровых негативов, lighttable, darkroom, non-destructive editing и экспорт. Все правки в darktable не изменяют исходные файлы, а полное изображение конвертируется на этапе экспорта; raw loading выполняется через rawspeed.

Adobe DNG SDK нужен для разработки функций вокруг DNG: чтения, записи DNG и преобразования DNG-данных в форму, пригодную для отображения или обработки. LibRaw шире как RAW-декодер разных камер, но сама может использовать Adobe DNG SDK для определённых DNG-сценариев.

ImageMagick удобен для скриптового преобразования изображений и массовых операций, но при RAW-файлах он зависит от того, какие делегаты и библиотеки доступны в конкретной сборке. Отдельный репозиторий ImageMagick для Windows-сборки LibRaw показывает, что LibRaw используется как слой RAW-чтения в более широких системах обработки изображений.

LibRaw скриншот 4

LibRaw выигрывает там, где требуется контроль на уровне чтения файла, API и интеграции. Она проигрывает там, где пользователь ожидает визуальный редактор с предпросмотром, локальными правками, профилями камер и готовым экспортом в JPEG/PNG для публикации.

Отзывы пользователей и профильных журналов

Усреднённое мнение пользователей сети

В пользовательских обсуждениях LibRaw чаще оценивают не как удобный редактор, а как рабочий технический компонент. Разработчики и опытные пользователи обсуждают поддержку новых камер, поведение dcraw_emu, отличие от dcraw, сборку под конкретную ОС, вывод CR3, способы подключения к darktable, RawTherapee или GIMP и особенности передачи RAW-данных дальше по цепочке. На pixls.us есть обсуждение, где пользователь скомпилировал snapshot LibRaw и смог конвертировать CR3 через dcraw_emu, после чего задавал вопросы о CLI-сценариях для darktable, RawTherapee и GIMP.

Частая пользовательская претензия связана не с тем, что LibRaw плохо редактирует, а с неправильным ожиданием. Пользователь запускает RAW через dcraw_emu, сравнивает результат с камерным JPEG, Adobe Camera Raw или графическим конвертером и видит отличия по яркости, цвету или контрасту. Это нормальный источник вопросов: разные RAW-конвертеры применяют разные алгоритмы, уровни, профили, кривые и автоматические поправки. В обсуждениях LibRaw встречаются вопросы о яркости dcraw_emu, camera-like preview, CR3/CR2 и выводе, похожем на Adobe Camera RAW.

Для разработчиков тональность отзывов обычно более практичная. В статье DEV Community о внедрении LibRaw в Tonfotos библиотека описана как открытый компонент с двумя лицензиями, хорошей поддержкой моделей камер и достаточно гладкой интеграцией, но также отмечены рабочие нюансы: не вся предсобранная платформа покрывала нужные архитектуры, при сборке возникали предупреждения, а многопоточность требовала внимания к настройкам TLS и LIBRAW_NOTHREADS.

Мнение профильных ресурсов

Softpedia рассматривает LibRaw как компонент для разработчиков, который позволяет читать и обрабатывать RAW-изображения, использовать библиотеку в панорамных stitcher-программах, графических анализаторах, редакторах метаданных и приложениях, работающих с цветовыми преобразованиями. На странице Softpedia также приведены семь скриншотов консольной работы LibRaw, что дополнительно подтверждает формат программы: это не визуальный редактор, а библиотека и утилиты командной строки.

OpenBenchmarking/Phoronix Test Suite выделяет LibRaw как отдельный профиль тестирования: RAW image decoder для цифровых камер, запускающий postprocessing_benchmark и измеряющий скорость в Mpix/sec. Для профильного тестового ресурса LibRaw интересна не как пользовательский редактор, а как вычислительная нагрузка и компонент обработки изображений.

В технических сообществах LibRaw часто обсуждается как элемент инфраструктуры. В разделе Libraw used by собираются программы, использующие библиотеку: среди примеров упоминаются libvips, Siril, Photo Mate R3, Fotoxx, Picture Window Pro 8 и ASTAP. Это показывает реальный профиль применения: LibRaw работает внутри других продуктов, где конечный пользователь может даже не видеть её названия в интерфейсе.

Безопасность и работа с повреждёнными файлами

RAW-декодер работает с бинарными файлами сложной структуры. Внутри RAW могут быть контейнеры, сжатые блоки, таблицы, preview, Makernotes, EXIF, смещения, размеры и дополнительные данные камеры. Ошибка в проверке размера, смещения или буфера может привести к сбою приложения. Поэтому для LibRaw безопасность — не отдельная внешняя функция, а часть качества декодера.

В исправлениях 0.22.1 перечислены изменения, связанные с CR3 parser, X3F decoder, DNG SDK glue, Sony YCC decoder, проверкой tile size, EOF, integer overflow, ограничением памяти и обработкой специально подготовленных файлов. В ветке 0.22 также есть изменения вроде 64-bit file offsets, новых лимитов для CR3 и embedded profile, дополнительных проверок DNG, X3F, Panasonic, Phase One и других форматов.

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

Лицензия и использование в коммерческих проектах

LibRaw распространяется с открытым исходным кодом под GNU LGPL 2.1 и CDDL 1.0. Разработчик выбирает лицензионный режим, который подходит его приложению. Если в исходный код LibRaw вносятся изменения и они передаются в основную библиотеку, такие патчи должны быть совместимы с распространением под обеими лицензиями.

Для коммерческого продукта важны три практических вопроса:

  1. Как подключается библиотека. Приложение может использовать динамическую или статическую линковку в зависимости от платформы и сборки.

  2. Какие изменения внесены. Изменение исходников LibRaw и простое использование готовой библиотеки — разные юридические и технические ситуации.

  3. Какие внешние компоненты включены. DNG SDK, zlib, JPEG-библиотеки, Jasper, LCMS, OpenMP и другие зависимости могут добавлять собственные условия и требования к сборке.

Обычному фотографу этот раздел нужен только для понимания, почему LibRaw часто встречается внутри других программ. Разработчику он нужен до начала интеграции: лицензионная модель влияет на архитектуру, поставку DLL, статическую линковку, документацию и политику обновления.

Кому подойдёт LibRaw

LibRaw хорошо подходит разработчику RAW-просмотрщика. Приложение может использовать open_file() для чтения метаданных, unpack_thumb() для быстрой галереи и unpack() для доступа к исходным данным. В интерфейсе такой программы пользователь увидит список файлов, миниатюры и фильтры, но RAW-чтение будет выполнять LibRaw.

Каталогизатору фотографий LibRaw нужна для распознавания камер, извлечения preview и ускорения первичного просмотра. В этом сценарии не обязательно выполнять полную конвертацию каждого кадра. Достаточно получить thumbnail, размер, модель камеры и параметры файла, а тяжелую обработку запускать только для выбранных снимков.

Техническому специалисту LibRaw полезна для анализа сенсорных данных. 4channels, unprocessed_raw, raw-identify -v и доступ к imgdata дают больше контроля, чем обычный просмотрщик. Такие задачи встречаются в исследовании RAW, проверке поведения сенсора, анализе masked pixels, сравнении каналов и диагностике нестандартных файлов.

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

Обычному пользователю без опыта терминала LibRaw неудобна. Для просмотра и редактирования снимков проще открыть FastStone Image Viewer, IrfanView, XnView MP или графический RAW-конвертер. LibRaw стоит выбирать тогда, когда нужна именно библиотека, API, автоматизация или техническая работа с RAW.

Частые ошибки при работе с LibRaw

Ожидать графический редактор

Самая частая ошибка — запускать LibRaw с ожиданием окна, где будут миниатюры, кривые, цветовые профили, кисти, маски и кнопка экспорта. LibRaw устроена иначе. Она открывает RAW, распаковывает данные, отдаёт метаданные и выполняет базовую конвертацию через примеры. Всё остальное строит приложение, которое использует библиотеку.

Сравнивать dcraw_emu с Lightroom без учёта обработки

Результат dcraw_emu -T -w photo.NEF не обязан совпадать с Adobe Lightroom, Capture One, камерным JPEG или RawTherapee. Каждый конвертер применяет собственные профили, кривые, коррекцию цвета, шумоподавление, резкость, highlight recovery и обработку яркости. LibRaw не обещает повторить визуальный стиль конкретного редактора.

Использовать старую сборку для новой камеры

Новая камера часто требует обновления RAW-декодера. Если сторонняя программа встроила старую версию LibRaw, поддержка модели может отсутствовать. Поддержка в LibRaw и поддержка в конкретном приложении зависят от версии библиотеки и конфигурации сборки.

Игнорировать параметры сборки

Часть функций зависит от внешних библиотек и опций. DNG, JPEG, LCMS, OpenMP, RawSpeed, GoPro SDK, Adobe DNG SDK и другие компоненты влияют на то, какие файлы читаются и как выполняется обработка. В разработке это нужно фиксировать в документации проекта, иначе один и тот же код будет вести себя по-разному на разных сборках.

Считать embedded preview полноценной проявкой

Thumbnail внутри RAW удобен для быстрого просмотра, но это не результат собственной обработки сенсорных данных LibRaw. Для точной конвертации нужно распаковывать RAW, учитывать black level, white balance, CFA/Bayer pattern, демозаику, цветовое преобразование и выходной формат.

Не обрабатывать ошибки API

Функции LibRaw возвращают коды ошибок. Их нельзя игнорировать. Программа должна проверять результат open_file(), unpack(), unpack_thumb(), dcraw_process() и записи файлов. При фатальной ошибке обработку текущего файла нужно завершать и освобождать ресурсы.

Итог

LibRaw стоит выбирать как RAW-декодер, библиотеку и технический инструмент, а не как замену графическому фоторедактору. Она сильна в чтении RAW-файлов, извлечении метаданных, embedded preview, работе через API, базовой конвертации, анализе каналов и интеграции в сторонние приложения. Для разработчика просмотрщика, каталогизатора, RAW-анализатора или системы пакетной обработки это один из самых практичных вариантов.

Фотографу без задач разработки лучше использовать визуальный RAW-конвертер. LibRaw не даст удобного окна проявки, локальных масок и каталога, но поможет там, где важны контроль, автоматизация и доступ к исходным данным. Для исследовательских сценариев подойдут raw-identify, 4channels и unprocessed_raw; для технической конвертации — dcraw_emu; для встраивания в собственное приложение — C++ API с open_file(), unpack(), unpack_thumb() и структурами imgdata.

Главный критерий выбора простой: если нужна программа для редактирования фотографий, выбирайте RAW-редактор. Если нужен надёжный слой чтения RAW внутри собственного софта или воспроизводимая работа с камерными файлами через командную строку, LibRaw решает именно эту задачу.

Список изменений

Происхождение и связь с dcraw:

  • LibRaw появился в 2008 году как проект, основанный на dcraw.c Дэйва Коффина. Цель состояла не в том, чтобы сделать ещё один отдельный RAW-конвертер, а в том, чтобы превратить логику dcraw в библиотеку, пригодную для встраивания в другие программы. В числе задач были устранение глобальных переменных, повышение потокобезопасности, перенос изменений из dcraw и расширение извлечения метаданных.
  • Поддержка dcraw была снижена до минимума в 2015 году и прекратилась в 2018 году. После этого поддержку новых камер и форматов выполняет команда LibRaw. Это объясняет, почему LibRaw часто воспринимают как современное продолжение идеи dcraw, но с другой архитектурой: вместо отдельной утилиты для пользователя — библиотека и набор примеров для интеграции.

Развитие в 2010-х:

  • В начале и середине 2010-х LibRaw расширяла постобработку: принимались улучшенные методы debayerization/demosaicing, систематическое шумоподавление и другие дополнительные алгоритмы. Затем акцент сместился. Поддерживать весь добавленный код силами основной команды оказалось трудно, а сторонние участники не всегда продолжали сопровождение своих методов. В итоге значительная часть внешних модификаций была вынесена в отдельный LibRaw-demosaic-pack, а основная библиотека сосредоточилась на чтении RAW, поддержке камер, метаданных и устойчивом API.
  • Для пользователя это означает, что LibRaw не превращалась в конкурента графических редакторов. Её развитие пошло в сторону инфраструктуры RAW-данных: распознать больше камер, корректнее извлечь метаданные, дать программам стабильный слой чтения и сохранить базовую совместимость с dcraw-подходом.

Ветка 0.20–0.21:

  • Ветка 0.20 стала важной для тестирования производительности: OpenBenchmarking использовал LibRaw 0.20 в профиле, где запускается postprocessing_benchmark на RAW-файле и результат измеряется в Mpix/sec. Такой профиль подчёркивает техническую роль LibRaw: она интересна не только фотографам, но и тем, кто измеряет производительность CPU и библиотек обработки изображений.
  • В ветке 0.21 шли исправления декодеров, совместимости и устойчивости. Релиз 0.21.5 упоминается в списке недавних релизов, а 0.21.3 добавлял поддержку 4-компонентных JPEG-compressed DNG. Для разработчиков такие минорные релизы важны не количеством новых кнопок, а устранением ошибок в специфических форматах и стабилизацией поведения на реальных файлах камер.

Ветка 0.22:

  • Ветка 0.22 принесла расширение поддержки RAW-форматов: Panasonic encoding 8, Sony YCC pseudo-RAW, DNG 1.7 с JPEG-XL через Adobe DNG SDK, Canon CRN embedded RAW, новый Samsung V3 decoder, OM System 14-bit high-resolution files и Nikon NEFX. Список камер пополнился моделями Canon EOS R1, EOS R5 Mark II, EOS R5 C, EOS R6 Mark II, Fujifilm X-T50, GFX 100S II, X-T5, X-S20, X-H2, GoPro HERO11/HERO12, Hasselblad CFV-100c, X2D-100c, Leica Q3 43, Nikon Z6-III, Z f, Z8, Panasonic GH7/S9/G9 II, Sony A9 III, A7C II, A7CR, ILCE-6700 и другими устройствами.
  • В этой же ветке расширились preview-возможности: JPEG-XL previews в DNG 1.7, H265 и JPEG-XL thumbnail для dcraw_make_mem_thumb , Jpeg XL preview writer и поддержка Jpeg XL preview в simple_dcraw -E/-e . Для каталогизаторов и просмотрщиков это существенно: скорость и корректность предпросмотра зависят не только от RAW-декодера, но и от того, какие форматы встроенных превью умеет читать библиотека.

Исправительные релизы и безопасность:

  • Исправительные релизы LibRaw закрывают не только обычные ошибки, но и проблемы обработки повреждённых или специально сконструированных файлов. В 0.22.1 перечислены исправления CR3 parser, DNG SDK glue, X3F decoder, Sony YCC decoder, расчётов размеров, проверок EOF, ограничений памяти и integer overflow.
  • Такая история важна для серверных сценариев. Если программа принимает RAW от неизвестных пользователей, декодер работает на границе безопасности: он читает сложные бинарные форматы, сжатые блоки, смещения, таблицы и embedded preview. LibRaw развивается не только через добавление камер, но и через защитные проверки размеров, буферов, типов данных и повреждённых структур.

Выберите ссылку для загрузки LibRaw

Всего скачали: 109 | сегодня: 0

Похожие программы на LibRaw

из раздела "Конвертеры RAW в JPG"

Оставте свой отзыв о LibRaw