ImageMagick策略解释顺序:禁用所有编码器,只允许一个

时间:2016-05-05 12:32:45

标签: imagemagick

不幸的是,imagemagick的policy documentation并不是很广泛,所以我想知道是否可以禁用除一个以外的所有编解码器。这可能吗?也许通过规则解释顺序,第二个政策否决了第一个政策:

<policy domain="coder" rights="none" pattern="*" />
<policy domain="coder" rights="read | write" pattern="jpeg" />

我可以想到几种可能性:

似乎模式中只有星号表示可用,而不是其他正则表达式匹配或否定(pattern="not jpeg"或其他)。

1 个答案:

答案 0 :(得分:0)

您不应该尝试使用通配符模式匹配,而应该对所有编码器进行说明。幸运的是,ImageMagick的identify实用程序,它可以告诉你系统库中所有可用的编码器。

identify -list Coder

您可以通过awk / sed以及其他单行实用程序来生成策略映射。

<policymap>
    <policy domain="coder" rights="none" pattern="BGR" />
    <policy domain="coder" rights="none" pattern="BMP" />
    <policy domain="coder" rights="none" pattern="BRAILLE" />
    <policy domain="coder" rights="none" pattern="CALS" />
    <policy domain="coder" rights="none" pattern="CMYK" />
    <policy domain="coder" rights="none" pattern="DDS" />
    <policy domain="coder" rights="none" pattern="DNG" />
    <policy domain="coder" rights="none" pattern="DOT" />
    <policy domain="coder" rights="none" pattern="EPT" />
    <policy domain="coder" rights="none" pattern="FAX" />
    <policy domain="coder" rights="none" pattern="FITS" />
    <policy domain="coder" rights="none" pattern="GIF" />
    <policy domain="coder" rights="none" pattern="GRADIENT" />
    <policy domain="coder" rights="none" pattern="HTML" />
    <policy domain="coder" rights="none" pattern="ICON" />
    <policy domain="coder" rights="none" pattern="INLINE" />
    <policy domain="coder" rights="none" pattern="JBIG" />
    <policy domain="coder" rights="none" pattern="JP2" />
    <policy domain="coder" rights="read | write" pattern="JPEG" />
    <!-- ...  -->
    <!-- 
        Other coders omitted so folks don't copy-n-past, and assume "job-done"
      -->
</policymap>

当然,请重复identify -list Formatidentify -list Delegate

但为什么不是模式?

我的论点是这样的。如果您今天创作一个聪明的模式,明天业务需求会发生变化时会发生什么?我认为政策图的复杂性会增加。

如果两年内有修改会怎样?试图阅读&amp;记住模式正在做的事情会比中的三个关键时刻花费更多的时间。