合适的代表 - ImageMagick

时间:2017-10-05 11:44:37

标签: delegates imagemagick

Ubuntu Server 17.04 + ImageMagick 7-0-6 ImageMagick

delegates.xml

中声明的委托中有很多SONY RAW(* .ARW)文件
  

...委托解码=" arw"命令="" /opt/alfresco/scripts/arw2jpg.sh"   "%I" "%O"" /

     

委托解码=" dng:解码"命令="" ufraw分批" - 无声   --create-id = also --out-type = png --out-depth = 16" - output =%u.png" "%I"" ...

coder.xml - 无变化

arw2jpg.sh - 使用DCRAW从ARW中提取嵌入式JPG的自定义脚本(dcraw -e ...)。脚本本身工作正常。

问题 - 在CONVERT工作期间,ImageMagick总是选择 dng:decode 委托而不是 arw

有人可以帮我定义ImageMagick的正确代理订单吗?

2 个答案:

答案 0 :(得分:1)

您只需确保在使用期间指定自定义委托协议。

例如......

convert arw:input_file.arw output.jpg
  

为什么?

ImageMagick通过magick-header / number选择委托,如果它无法找到委托,它将评估匹配的文件扩展名。在您的示例中,您只是拥有竞争代表,冲突解决/优先级对您不利。您必须明确指出要使用哪个代理(即arw:)。

答案 1 :(得分:0)

Eric(@emcconville)的回答是正确,理智的做法,但你似乎陷入了摇滚和困难的地方,所以这是一个有点疯狂的方法。

如果 ImageMagick 总是选择DNG委托,而你无法覆盖它,你可以通过更改DNG委托来选择你想要的方式。因此,您可以更改现有的DNG行,使其如下所示:

delegate decode="dng:decode" command=""YourDecider" " "%i" "%o" "%u"

然后在/usr/local/bin中编写一个脚本,查看文件扩展名,并使用适当的参数调用/opt/alfresco/scripts/arw2jpg.sh,或使用最初的相同参数集调用ufraw-batch delegates.xml,即--silent --create-id=also --out-type=png --out-depth=16...

所以,你的脚本/usr/local/bin/YourDecider看起来像这样 - 完全没有问题 - 只是为了给你一个想法:

#!/bin/bash
################################################################################
# YourDecider
# Choose between decoding file with arw2jpg or ufraw-batch
################################################################################
in=$1
out=$2
unique=$3
ext=$(tr "[:upper:]" "[:lower:]" <<< "${in##*.}") 
if [ "$ext" = "arw" ]; then
   exec /opt/alfresco/scripts/arw2jpg.sh "$in" "$out"
else
   exec ufraw-batch --silent --create-id=also --out-type=png --out-depth=16 --output="${unique}.png" "$in" ...
fi

您必须使用以下命令使其可执行:

chmod +x /usr/local/bin/YourDecider