imagemagick RAW файл идентифицирует / конвертирует - такого файла или каталога нет (файл tmp)

Я пытаюсь использовать imagemagick-7 (CLI) в Ubuntu для идентификации и преобразования изображений RAW в формат PNG. Я использую dcraw двоичный как делегат для идентификации и преобразования необработанных изображений.

Я обновил dng:decode делегировать в delegates.xml следующее:

<delegate decode="dng:decode" command="&quot;dcraw&quot; &quot;%i&quot;" />

Когда я запускаю эту команду: 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="&quot;dcraw&quot; -c &quot;%i&quot; &gt; &quot;%u.ppm&quot;" />

Почти! Вам нужно использовать %o заполнитель, чтобы сообщить менеджеру делегата, куда будет записан выходной файл. Тем не менее dcraw У утилиты нет выходных опций назначения - по крайней мере из того, что я могу сказать из справочной страницы. У него есть опция stdout (-c), поэтому вы должны иметь возможность направить / перенаправить поток в выходное местоположение.

dcraw -c %i > %o

или в делегате XML.

<delegate decode="dng:decode" command="&quot;dcraw&quot; -c &quot;%i&quot; &gt; &quot;%o&quot;" />

Обновить

Некоторые трюки, которые я наблюдал с пользовательскими делегациями.

  • Используйте полный путь к двоичным файлам. Обычно потому, что я установил что-то вне систем PATH. Обычно /usr/local/bin или же /opt каталоги.

    command="/usr/local/bin/dcraw ...
    
  • использование mv над трубами. Если вам не нравится отлаживать потоки Unix и тому подобное. Просто выполните базовую команду копирования / перемещения. Мы можем переписать приведенную выше команду чем-то вроде...

    dcraw %i; mv %i.ppm %o
    
  • Игнорируйте экранирование кавычек, пока не узнаете, как оно работает. Инкапсулирующие аргументы важны и сохраняют все в безопасности, но \"%i & &quot;%i трудно читать

    <delegate decode="dng:decode" command="dcraw %i; mv %i.ppm %o" />
    

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

    <delegate decode="dng:decode" command="dcraw &quot;%i&quot;; mv &quot;%i&quot;.ppm &quot;%o&quot;" />
    
  • Как указывалось ранее, используйте identify -list Delegate чтобы убедиться, что команда загружена правильно, и -verbose чтобы убедиться, что он был вызван правильно во время выполнения.

Для всех, кто сталкивался с этой проблемой, мое решение закончилось тем, что я переключился с imagemagick на graphicsmagick, который по умолчанию настроен на использование dcraw (конечно, вам нужно иметь dcraw установлен и на вашем PATH).

http://www.graphicsmagick.org/

Другие вопросы по тегам