2014-12-13 101 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:\"