我想使用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:\"