LXF99:Вопрос5
|
|
|
Фото-групповуха
В: Мне бы хотелось иметь простую команду для перевода всех 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 для извлечения имени файла из полного пути и удаляем расширения. Кавычки вокруг имен файлов нужны на случай, если имя файла или каталога содержит пробелы. НВ