Порядок интерпретации политики ImageMagick: отключить все кодеры, разрешить только один

к сожалению, документация по политике для imagemagick не очень широка,поэтому я хотел узнать, можно ли отключить все кодеки, кроме одного. Возможно ли это? Возможно, по порядку интерпретации правил, когда вторая политика превосходит первую, как это:

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

Я могу придумать несколько возможностей для этого:

Кажется, есть только звездочка-глобация, доступная в шаблонах, а не другие соответствия или отрицание стиля regex ( pattern="not jpeg"или что-то).

1 ответ

  1. Вы не должны пытаться сопоставлять шаблоны подстановочных знаков, но должны быть эксплицированы обо всех кодерах. К счастью, identifyутилита ImageMagick, и она может рассказать вам все кодеры, доступные в библиотеке системы.

    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 Format, а identify -list Delegate.

    Но почему не образец?

    Мой аргумент таков. Если вы создаете умный шаблон сегодня, что произойдет, когда бизнес-требования изменятся завтра? Я думаю, что политическая карта будет усложняться.

    Что произойдет, если будет пересмотр через два года? Попытка прочитать и запомнить, что делает шаблон, займет гораздо больше времени, чем три ключа-Стокса в .