我想使用ImageMagick转换将许多PNG附加到一个巨大的PNG。使ImageMagick使用外部硬盘临时文件
当我在具有大量空闲内存的个人电脑上使用它时,但我需要现在在我的笔记本电脑上执行此操作,并且没有足够的空间。我也尝试识别-limit memory
,-limit space
等,但没有足够的空间。
如何将ImageMagick的临时文件路径设置为我的外置硬盘?
我想使用ImageMagick转换将许多PNG附加到一个巨大的PNG。使ImageMagick使用外部硬盘临时文件
当我在具有大量空闲内存的个人电脑上使用它时,但我需要现在在我的笔记本电脑上执行此操作,并且没有足够的空间。我也尝试识别-limit memory
,-limit space
等,但没有足够的空间。
如何将ImageMagick的临时文件路径设置为我的外置硬盘?
ImageMagick的命令行工具可以识别以下环境变量:
MAGICK_TEMPORARY_PATH
这设置存储临时文件的路径。对于设置此变量时运行的所有命令都有效。
的另一种方法是添加到-define registry:temporary-path=...
特定命令,例如:
convert \
-define registry:temporary-path=/Volumes/external/tmp \
wizard: \
-resize 250000x250000 \
wizard-250000x250000px.miff
那么这是仅适用于该单个命令。 (顺便说一下,wizard:
是ImageMagick中的一个内置示例图片 - 如果您正在使用ImageMagick命令,您可以随时将其用作测试ImageMagick命令的示例图像。)
为了防止大图像消耗所有内存在系统上,你可以强制图像像素与资源限制内存映射磁盘,加入-limit memory ...
:
convert \
-define registry:temporary-path=/Volumes/external/tmp \
-limit memory 16mb \
wizard: \
-resize 250000x250000 \
wizard-250000x250000px.miff
你甚至可以强制所有图像像素到磁盘,使用-limit area 0
:
convert \
-define registry:temporary-path=/Volumes/external/tmp \
-limit area 0 \
wizard: \
-resize 250000x250000 \
wizard-250000x250000px.miff
但是,请注意这一点:将像素缓存到磁盘比使用RAM慢几个数量级。这个因素大约是1000! (当然固态硬盘速度更快。)如果需要几秒甚至几个小时,通常需要几分钟的时间...
对于这些情况,这是很方便的-monitor
处理的进展情况:
convert \
-monitor \
-limit memory 1GiB \
-limit map 2GiB \
-define registry:temporary-path=/Volumes/external/tmp \
wizard: \
-resize 250000x250000 \
logo-250000x250000px.miff
的-monitor ...
增加将显示在你的终端动态变化的进展状态行说像
resize image[WIZARD]: 24999 of 43750, 57% complete
该-limit
设置可以被应用到area
,disk
,file
,map
,memory
,thread
或time
。 file
设置文件,area
,memory
和map
数设置(SI前缀被允许)的字节数,time
是秒。
您可以通过运行
identify -list resource
我得到查询您的ImageMagick安装当前(或默认)的设置:
File Area Memory Map Disk Thread Throttle Time
-------------------------------------------------------------------------------
192 4.295GB 2GiB 4GiB unlimited 1 0 unlimited
对于命令行-limit
设置有匹配的环境变量太多。它们是:
MAGICK_AREA_LIMIT
MAGICK_DISK_LIMIT
MAGICK_FILE_LIMIT
MAGICK_MEMORY_LIMIT
MAGICK_MAP_LIMIT
MAGICK_THREAD_LIMIT
MAGICK_TIME_LIMIT
这些限制中使用的图像区域,磁盘空间,打开文件,堆内存,存储器映射,执行的线程的数目,并在几秒钟的最大经过时间的资源。
设置环境变量MAGICK_TEMPORARY_PATH到E:\
参考是here。
在Linux/OSX你做
export MAGICK_TEMPORARY_PATH=/volumes/somewherebig
我相信你可以计算的Windows平台上类似,大概就是这个样子
SET MAGICK_TEMPORARY_PATH="E:\"