ImageMagick 命令行 convert -limit 值

kim*_*der 12 command-line imagemagick

我需要转换一个非常大的图像。Image Magick 的默认资源限制太小了。

Image Magick 网站讨论了更改限制,但我尝试过的语法都没有奏效,无法识别命令。

例如,我需要将 magick_disk_limit 设置为 25GB 之类的东西。然后会有一系列其他的设置,magick_area_limit,magick_height_limit等等。我如何输入这些命令?

我试过的是

-limit width 100KP
convert -limit width 100KP
magick_disk_limit 25GB
MAGICK_DISK_LIMIT 25GB
Run Code Online (Sandbox Code Playgroud)

在所有情况下,响应要么是未找到命令,要么是无法识别的资源类型。我还尝试使用所有 -limit 参数定义为命令的一部分的转换命令,如下所示:

convert -limit 100KP 100KP 100GP 14GiB 100GiB unlimited 5 8 0 unlimited Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png
Run Code Online (Sandbox Code Playgroud)

我现在已经试过了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
Run Code Online (Sandbox Code Playgroud)

生成此警告和错误列表

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.
Run Code Online (Sandbox Code Playgroud)

kim*_*der 19

我能够通过 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>
Run Code Online (Sandbox Code Playgroud)

需要更改的部分已经有了我替换的值,所以我可以处理有问题的图像。它们是第 3 行到第 8 行,名为“内存”的资源到名为“磁盘”的资源。

进行这些更改后,检查终端并identify -list resource返回新值。