2014-12-13 98 views
4

我想使用ImageMagick转换将许多PNG附加到一个巨大的PNG。使ImageMagick使用外部硬盘临时文件

当我在具有大量空闲内存的个人电脑上使用它时,但我需要现在在我的笔记本电脑上执行此操作,并且没有足够的空间。我也尝试识别-limit memory,-limit space等,但没有足够的空间。

如何将ImageMagick的临时文件路径设置为我的外置硬盘?

回答

14

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设置可以被应用到areadiskfilemapmemorythreadtimefile设置文件,areamemorymap数设置(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 

这些限制中使用的图像区域,磁盘空间,打开文件,堆内存,存储器映射,执行的线程的数目,并在几秒钟的最大经过时间的资源。

2

设置环境变量MAGICK_TEMPORARY_PATH到E:\

参考是here

在Linux/OSX你做

export MAGICK_TEMPORARY_PATH=/volumes/somewherebig 

我相信你可以计算的Windows平台上类似,大概就是这个样子

SET MAGICK_TEMPORARY_PATH="E:\"