使用ImageMagick時,我可以設置內存使用量和最大線程數的某些限制。有3種方法可以做到這一點,據我所知:IMagick(PHP)中的線程數限制
- 使用命令行選項,如「轉換-limit 128MB內存original.jpg new.jpg」
- 使用環境變量,如「MAGICK_THREAD_LIMIT = 1 「
- 編輯'policy.xml'配置文件以更改默認值。
我已經使用「convert -list resource」測試了這些方法中的每一個,它們都可以工作。
現在,我需要在PHP中使用IMagick擴展。還有一個功能,我可以用它來設置限制:
bool Imagick::setResourceLimit (int $type, int $limit)
對於第一個參數,我可以使用下列之一:
imagick::RESOURCETYPE_AREA (integer) //equivalent of MAGICK_AREA_LIMIT
imagick::RESOURCETYPE_DISK (integer) //equivalent of MAGICK_DISK_LIMIT
imagick::RESOURCETYPE_FILE (integer) //equivalent of MAGICK_FILE_LIMIT
imagick::RESOURCETYPE_MAP (integer) //equivalent of MAGICK_MAP_LIMIT
imagick::RESOURCETYPE_MEMORY (integer) //equivalent of MAGICK_MEMORY_LIMIT
的問題是,有沒有類似MAGICK_THREAD_LIMIT和IMagick似乎簡單地忽略配置文件和環境變量。我怎麼知道這個?我已將所有內存限制設置爲零,並且IMagick在報告內存不足時仍能正常運行。
我真的很希望我已經說清楚了。 問題是:如何在使用IMagick時更改線程限制?
編輯: 我設法將線程限制設置爲1通過編譯ImageMagick與'--without-threads'選項。 :P它將不得不做,直到我找到一個更好的解決方案。
你嘗試使用一個小的,非零值的內存限制,以及? (例如。,1)似乎沒有關於setResourceLimit方法的任何文檔,它可以使用0作爲無限制,或者0可以被忽略,並且當imagemagick被調用時使用默認值。 – gapple 2010-01-23 01:27:00
如果我使用$ image-> setResourceLimit將限制設置爲零,IMagick會給我提供關於內存不足的錯誤。我很確定這會禁用它們,例如,您可以禁用磁盤內存。 – liviucmg 2010-01-23 07:10:05
據我所知,設置內存資源限制只是使用了多少內存 - 如果需要更多內存,它將使用其自己的基於磁盤的交換文件。 – scotts 2010-12-10 21:57:01