Журнал LinuxFormat - перейти на главную

LXF99:Вопрос5

Материал из Linuxformat
Перейти к: навигация, поиск

Фото-групповуха

В: Мне бы хотелось иметь простую команду для перевода всех RAW-изображений в папке, скажем, /home/andy/photographs/new, в формат TIFF со сжатием LZW. Не знаю, важно ли это, но расширение RAW-файлов – PEF (в формате RAW Pentax). Энди Инглэнд [Andy England]

О: Программа для конверсии «сырых» (raw) файлов с цифровых камер называется dcraw (http://www.cybercom.net/~dcoffin/dcraw). Она преобразует RAW-форматы большинства цифровых камер в формат NetPBM PPM (Portable PixMap). Затем понадобится еще одна программа, для преобразования PPM-данных в TIFF. Такое умеют команда convert из ImageMagick и программа pnmtotiff из пакета NetPBM. На вопрос о том, которую предпочесть, проще всего ответить «Ту, что уже установлена». Dcraw должна быть в репозитории вашего дистрибутива; в противном случае загрузите исходный код и скомпилируйте/установите ее обычным порядком.

Чтобы не забивать при преобразовании жесткий диск PPM-файлами (PPM –занимающий много места несжатый формат, где используются три байта на пиксель), можно перекинуть вывод dcraw прямо в программу конверсии. Для групповой обработки с помощью ppm2tiff всей директории с файлами, запустите в терминале

 for f in ~/photographs/new/*.PEF
 do
   dcraw -c "$f" | pnmtotiff -lzw >"${f/.PEF/.tif}"
 done

Аргумент -c велит dcraw посылать данные на стандартный вывод, который передается на вход pnmtotiff. Выражение ${f/.PEF/.tiff} подставляет имя исходного файла, меняя расширение PEF на tif. Чтобы использовать ImageMagick, измените третью строку на

dcraw -c "$f" | convert -compress lzw – "${f/.PEF/.tif}"

В этом случае convert использует обычную нотацию "-" для стандартного ввода. На man-страницах imagemagick, dcraw, netpbm и convert подробно описаны всякие дополнительные опции для тонкой настройки процесса.

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

 find /mount/pointof/camera -name '*.PEF' | while
  read f
  do
    dcraw -c "$f" | convert -compress lzw - "~/
  photographs/tiff/$(basename "$f" .PEF).tif"
 done

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

Персональные инструменты
купить
подписаться
Яндекс.Метрика