imagemagick RAW файл идентифицирует / конвертирует - такого файла или каталога нет (файл tmp)
Я пытаюсь использовать imagemagick-7 (CLI) в Ubuntu для идентификации и преобразования изображений RAW в формат PNG. Я использую dcraw
двоичный как делегат для идентификации и преобразования необработанных изображений.
Я обновил dng:decode
делегировать в delegates.xml
следующее:
<delegate decode="dng:decode" command=""dcraw" "%i"" />
Когда я запускаю эту команду: magick identify test.dng
Я получаю следующую ошибку:
identify: unable to open image '/tmp/magick-24332a6nW8lcwejNJ.ppm': No such file or directory @ error/blob.c/OpenBlob/3489.
Такая же ошибка дана для magick convert
, Я заметил, что imagemagick создает временный промежуточный файл в моем /tmp
каталог, имя которого отличается от имени, которое он ожидает найти там. Например, он генерирует этот файл - magick-24332P6aVDePOFeCn.ppm
- но ожидает, что созданный файл будет иметь это имя - magick-24332a6nW8lcwejNJ.ppm
- вот почему это не найти.
Примечание: я протестировал ту же самую вещь на OS X, и она прекрасно работает (с тем же delegates.xml
конфигурации).
Это ошибка в реализации ImageMagick для Unix-систем или я делаю что-то не так? Любые мысли будут с благодарностью!
3 ответа
Вы были близки правильная команда для использования в делегате
<delegate decode="dng:decode" command=""dcraw" -c "%i" > "%u.ppm"" />
Почти! Вам нужно использовать %o
заполнитель, чтобы сообщить менеджеру делегата, куда будет записан выходной файл. Тем не менее dcraw
У утилиты нет выходных опций назначения - по крайней мере из того, что я могу сказать из справочной страницы. У него есть опция stdout (-c
), поэтому вы должны иметь возможность направить / перенаправить поток в выходное местоположение.
dcraw -c %i > %o
или в делегате XML.
<delegate decode="dng:decode" command=""dcraw" -c "%i" > "%o"" />
Обновить
Некоторые трюки, которые я наблюдал с пользовательскими делегациями.
Используйте полный путь к двоичным файлам. Обычно потому, что я установил что-то вне систем PATH. Обычно
/usr/local/bin
или же/opt
каталоги.command="/usr/local/bin/dcraw ...
использование
mv
над трубами. Если вам не нравится отлаживать потоки Unix и тому подобное. Просто выполните базовую команду копирования / перемещения. Мы можем переписать приведенную выше команду чем-то вроде...dcraw %i; mv %i.ppm %o
Игнорируйте экранирование кавычек, пока не узнаете, как оно работает. Инкапсулирующие аргументы важны и сохраняют все в безопасности, но
\"%i
&"%i
трудно читать<delegate decode="dng:decode" command="dcraw %i; mv %i.ppm %o" />
... проверять, что вещи называются правильно... тогда, вероятно, избежать путей.
<delegate decode="dng:decode" command="dcraw "%i"; mv "%i".ppm "%o"" />
Как указывалось ранее, используйте
identify -list Delegate
чтобы убедиться, что команда загружена правильно, и-verbose
чтобы убедиться, что он был вызван правильно во время выполнения.
Для всех, кто сталкивался с этой проблемой, мое решение закончилось тем, что я переключился с imagemagick на graphicsmagick, который по умолчанию настроен на использование dcraw
(конечно, вам нужно иметь dcraw
установлен и на вашем PATH
).