1

我正在尝试在 ubuntu 上使用 imagemagick-7 (CLI) 来识别 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系统实现中的错误还是我做错了什么?任何想法将不胜感激!

4

3 回答 3

1

几乎!您需要使用%o占位符告诉委托管理器输出文件将被写入。但是,该dcraw实用程序在输出目标选项中没有 - 至少从我可以从手册页中得知。它确实有一个标准输出选项 ( -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验证它在运行时是否正确调用。

于 2018-09-14T01:27:52.237 回答
1

您关闭了在委托中使用的正确命令是

<delegate decode="dng:decode" command="&quot;dcraw&quot; -c &quot;%i&quot; &gt; &quot;%u.ppm&quot;" />
于 2018-10-01T08:35:07.423 回答
0

对于遇到此问题的其他人,我的解决方案最终是从 imagemagick 切换到 graphicsmagick,默认配置为使用dcraw(当然,您需要dcraw安装并在您的PATH.

http://www.graphicsmagick.org/

于 2018-09-16T19:07:00.497 回答