当我尝试使用ImageMagick软件调整一个非常大的图像的大小时,比如30,000px x 20,000px,我遇到了问题。但是我没有足够的RAM。我有8 8GB,但软件需要大约10 8GB~。我需要使用RAM中的所有数据。我尝试了两个选项:
1使用convert,写入不同的图像文件:
convert -resize 90% source.jpg destination.jpg
使用mogrify的
mogrify -resize 90%source.jpg
也许有人知道我如何使用较少的内存或其他一些技巧。
有关Imagemagick的更多信息,请访问:http://www.imagemagick.org/script/mogrify.php
发布于 2014-10-21 00:07:24
如果您试图将ImageMagick的内存策略配置为使用更多的内存,那么在缓存到磁盘之前,可以通过修改policy.xml或设置环境变量来定义区域限制。
在环境中设置内存限制
对于一次性过程,这可能是最快的方法。
MAGICK_AREA_LIMIT=8GB convert -resize 90% source.jpg destination.jpg
还尝试调整其他环境变量
MAGICK_MAP_LIMIT
-分配给像素的最大内存量映射( of ) cache.MAGICK_MEMORY_LIMIT
-从堆中分配给像素缓存的最大内存量( of )。使用Policy.xml设置内存限制
编辑{$PREFIX}/lib/ImageMagic-X.X.X/config
目录下的policy.xml
。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
<!ELEMENT policy (#PCDATA)>
<!ATTLIST policy domain (delegate|coder|filter|path|resource) #IMPLIED>
<!ATTLIST policy name CDATA #IMPLIED>
<!ATTLIST policy rights CDATA #IMPLIED>
<!ATTLIST policy pattern CDATA #IMPLIED>
<!ATTLIST policy value CDATA #IMPLIED>
]>
<policymap>
<policy domain="resource" name="memory" value="8GB"/>
<policy domain="resource" name="map" value="8GB"/>
<policy domain="resource" name="area" value="8GB"/>
</policymap>
验证
无论您选择哪种方法,都可以通过运行identify
实用程序进行验证。
$ identify -list resource
File Area Memory Map Disk Thread Throttle Time
--------------------------------------------------------------------------------
1920 8GB 8GB 8GB unlimited 1 0 unlimited
发布于 2014-10-20 20:48:11
目前还不清楚你试图实现的总体目标是什么,但你可以在阅读图像时调整它的大小,这样应该会占用更少的内存:
convert source.jpg'[15000x10000]' destination.jpg
发布于 2018-06-19 21:07:05
编辑/etc/ImageMagick/policy.xml
下的policy.xml
在我的例子中,它使用了超过2GiB的空间,但在这里你可以进行限制,这样脚本就可以在提供的限制下运行。我将其设置为map
和memory
的512MiB。
https://stackoverflow.com/questions/26465773
复制相似问题