我正在使用Imagick最新版本& PHP 5.3。当我尝试为图像创建缩略图(下面的代码)时,脚本使用了太多的CPU。如何在Imagick上设置资源消耗限制?
$thumb = new Imagick();
$thumb->readImage($this->tmp_file);
$thumb->thumbnailImage(200, null);
$thumb->writeImage($this->thumb_file);
$thumb->destroy();
感谢。
答案 0 :(得分:0)
你想做什么?如果您在每次用户访问页面时尝试创建缩略图,您将很快在CPU上创建非常繁重的负载。您可以通过仅生成一次图像并将其保存到缩略图目录来解决此问题。
您还可以使用PHP.ini或ini_set命令将PHP设置为具有特定的内存限制。请参阅here和here。
我不认为你可以在imagemagick中专门设置内存限制,除非你自己设置命令行参数(最后回答here)
答案 1 :(得分:0)
我的建议
一个。利用缓存
B中。不要一直生成Thumb
℃。使用Gearman
或beanstalkd
等作业排队系统生成大拇指,这样您就不必立即执行此操作
示例仅在原始文件被修改时生成拇指
$file = "a.jpg" ;
$thumbFile = "a.thumb.jpg" ;
$createThumb = true;
if(is_file($thumbFile))
{
if((filemtime($file) - 10) < filemtime($thumbFile));
{
$createThumb = false;
}
}
if($createThumb === true)
{
$thumb = new Imagick();
$thumb->readImage($file);
$thumb->thumbnailImage(50, null);
$thumb->writeImage($thumbFile);
$thumb->destroy();
}
答案 2 :(得分:0)
我相信您可以使用setResourceLimit
更改Imagick的限额:
Imagick::setResourceLimit( $type, $limit );
可用的类型常量:
Imagick::RESOURCETYPE_AREA
Imagick::RESOURCETYPE_DISK
Imagick::RESOURCETYPE_FILE
Imagick::RESOURCETYPE_MAP
Imagick::RESOURCETYPE_MEMORY
使用上面列出的相同常量,您可以查看getResourceLimit
当前正在使用的限制之一:
Imagick::getResourceLimit( $type )