Файл RAW imagemagick идентифицирует / конвертирует - такого файла или каталога нет (файл tmp) - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь использовать 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 ]

0 голосов
/ 16 сентября 2018

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

http://www.graphicsmagick.org/

0 голосов
/ 01 октября 2018

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

<delegate decode="dng:decode" command="&quot;dcraw&quot; -c &quot;%i&quot; &gt; &quot;%u.ppm&quot;" />
0 голосов
/ 14 сентября 2018

Почти!Вам нужно использовать заполнитель %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, чтобы убедиться, что она была вызвана правильно во время выполнения.

...