使用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