我需要转换一张非常大的图片。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
在所有情况下,响应要么是命令未找到,要么是无法识别的资源类型。我还尝试输入一个 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 holder 回答的扩展
去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 可以调整大小!