Linha de comando do ImageMagick converte valores -limit

Linha de comando do ImageMagick converte valores -limit

Preciso converter uma imagem extremamente grande. Os limites de recursos padrão do Image Magick são muito pequenos.

O site da Magia da Imagemdiscute mudança dos limites, mas nenhuma das sintaxes que tentei funcionou, os comandos não são reconhecidos.

Por exemplo, preciso definir magick_disk_limit para algo como 25 GB. Depois haverá uma série de outros para definir, magick_area_limit, magick_height_limit, etc. Como insiro esses comandos?

O que eu tentei é

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

Em todos os casos, a resposta é comando não encontrado ou tipo de recurso não reconhecido. Também tentei colocar um comando convert com todos os parâmetros -limit definidos como parte do comando, assim:

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

Eu tentei agora export MAGICK_DISK_LIMIT=25GiB, mas quando entro identify -list resourceo limite do disco não mudou.

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

gera esta lista de avisos e erros

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.

Responder1

Eu fui capaz deencontre uma solução através do fórum ImageMagick.

O método era alterar as configurações de Limites de recursos no tratamento de arquivos que no ImageMagick, chamado policy.xml. No Ubuntu 18.04 que é encontrado em /etc/ImageMagick-6. Ele está definido como somente leitura, então alterei temporariamente as permissões de gravação sudo chmod 777 policy.xmldentro dessa pasta. Depois de fazer as alterações, mudei a permissão para 744.

Esta é a aparência da seção relevante do 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>

As partes que precisavam ser alteradas já possuem os valores que substituí para que eu possa processar a imagem em questão. Eles vão da 3ª à 8ª linha, do recurso denominado "memória" ao recurso denominado "disco".

Depois de fazer essas alterações, o check-in no terminal identify -list resourceretorna os novos valores.

Responder2

Você não disse o que tentou e suspeito que o problema do caso " magick_area_limit" não seja o mesmo que " MAGICK_AREA_LIMIT".

mas aqui estão duas maneiras:

Comece imagemagickcom um script:

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

ou use o envcomando:

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

Responder3

Estou usando o Ubuntu 20.0.4 LTS, esta é uma extensão para responder do titular @kim

Vá parasudo nano /etc/ImageMagick-6/policy.xml

Altere as linhas abaixo para permitir a conversão de imagens em tamanho grande.

  <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"/>

Leia também a resposta original
https://askubuntu.com/a/1041633/970339

Obrigado, espero que isso esclareça para fazer a correção rapidamente.

Responder4

Eu gerencio esse problema em um VPS e não tenho tantos recursos, então basta alterar um pouco esses 3 valores:

<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 -->

e a imagem 7803x19208 pode ser redimensionada!

informação relacionada