Конвертация значений командной строки ImageMagick - ограничение

Конвертация значений командной строки ImageMagick - ограничение

Мне нужно преобразовать очень большое изображение. Ограничения по ресурсам Image Magick по умолчанию слишком малы.

Веб-сайт Image Magickобсуждает изменение лимитов, но ни один из опробованных мной синтаксисов не сработал, команды не распознаются.

Например, мне нужно установить magick_disk_limit на что-то вроде 25 ГБ. Затем нужно будет установить ряд других, magick_area_limit, magick_height_limit и т. д. Как мне ввести эти команды?

То, что я пробовал, это

-limit width 100KP
convert -limit width 100KP
magick_disk_limit 25GB
MAGICK_DISK_LIMIT 25GB

Во всех случаях ответом было либо команда не найдена, либо нераспознанный тип ресурса. Я также пробовал вставить команду convert со всеми параметрами -limit, определенными как часть команды, например:

convert -limit 100KP 100KP 100GP 14GiB 100GiB unlimited 5 8 0 unlimited Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png

Я сейчас попробовал export MAGICK_DISK_LIMIT=25GiB, но когда я ввожу данные, identify -list resourceлимит диска не изменился.

convert -limit memory 12GB -limit map 25GiB -limit width 10MP -limit height 10MP -limit area 100GP -limit disk 30GiB Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png

генерирует этот список предупреждений и ошибок

convert-im6.q16: Unknown field with tag 33550 (0x830e) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 33922 (0x8482) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34735 (0x87af) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34736 (0x87b0) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34737 (0x87b1) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 42112 (0xa480) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 42113 (0xa481) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: width or height exceeds limit `Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif' @ error/cache.c/OpenPixelCache/3837.
convert-im6.q16: no images defined `MoonRelief.png' @ error/convert.c/ConvertImageCommand/3258.

решение1

я могнайти решение на форуме ImageMagick.

Метод заключался в изменении настроек для ограничений ресурсов в обработке файлов в ImageMagick, называемой policy.xml. В Ubuntu 18.04 это находится в /etc/ImageMagick-6. Он установлен как только для чтения, поэтому я временно изменил разрешения на запись с помощью sudo chmod 777 policy.xmlиз этой папки. После внесения изменений я изменил разрешение на 744.

Вот как выглядит соответствующий раздел policy.xml:

<policymap>
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <policy domain="resource" name="memory" value="14GiB"/>
  <policy domain="resource" name="map" value="30GiB"/>
  <policy domain="resource" name="width" value="16MP"/>
  <policy domain="resource" name="height" value="16MP"/>
  <policy domain="resource" name="area" value="40GP"/>
  <policy domain="resource" name="disk" value="30GiB"/>
  <!-- <policy domain="resource" name="file" value="768"/> -->
  <!-- <policy domain="resource" name="thread" value="4"/> -->
  <!-- <policy domain="resource" name="throttle" value="0"/> -->
  <!-- <policy domain="resource" name="time" value="3600"/> -->
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <!-- not needed due to the need to use explicitly by mvg: -->
  <!-- <policy domain="delegate" rights="none" pattern="MVG" /> -->
  <!-- use curl -->
  <policy domain="delegate" rights="none" pattern="URL" />
  <policy domain="delegate" rights="none" pattern="HTTPS" />
  <policy domain="delegate" rights="none" pattern="HTTP" />
  <!-- in order to avoid to get image with password text -->
  <policy domain="path" rights="none" pattern="@*"/>
  <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/>
</policymap>

Части, которые нужно было изменить, уже имеют значения, которые я подставил, чтобы я мог обработать изображение. Это строки с 3-й по 8-ю, ресурс с именем "память" к ресурсу с именем "диск".

После внесения этих изменений проверка в терминале identify -list resourceвозвращает новые значения.

решение2

Вы не сказали, что именно вы пытались сделать, и я подозреваю, что проблема с " magick_area_limit" не совпадает с " MAGICK_AREA_LIMIT".

но вот два способа:

Начните imagemagickсо сценария:

#!/bin/bash
export MAGICK_DISK_LIMIT=42GiB
export MAGICK_AREA_LIMIT=42MP
# etc ...
imagemagic "$@"

или используйте envкоманду:

env MAGICK_DISK_LIMIT=42GiB MAGICK_AREA_LIMIT=42MP imagemagick ...

решение3

Я использую Ubuntu 20.0.4 LTS, это расширение для ответа от владельца @kim

Идти кsudo nano /etc/ImageMagick-6/policy.xml

Измените приведенные ниже строки, чтобы включить преобразование изображений большого размера.

  <policy domain="resource" name="memory" value="14GiB"/>
  <policy domain="resource" name="map" value="30GiB"/>
  <policy domain="resource" name="width" value="16MP"/>
  <policy domain="resource" name="height" value="16MP"/>
  <policy domain="resource" name="area" value="40GP"/>
  <policy domain="resource" name="disk" value="30GiB"/>

Прочитайте также оригинальный ответ.
https://askubuntu.com/a/1041633/970339

Спасибо, надеюсь, это прояснит ситуацию и поможет быстро ее исправить.

решение4

Я решаю эту проблему на VPS и у меня не так много ресурсов, поэтому просто немного изменю эти 3 значения:

<policy domain="resource" name="width" value="24KP"/> <!-- default 16KP -->
<policy domain="resource" name="height" value="24KP"/> <!-- default 16KP -->
<policy domain="resource" name="disk" value="3GiB"/> <!-- default 1GiB -->

и изображение 7803x19208 можно изменить!

Связанный контент