我正在使用 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();
谢谢。
我相信您可以使用以下方法更改 Imagick 的限制setResourceLimit
:
Imagick::setResourceLimit( $type, $limit );
可用的类型常量:
Imagick::RESOURCETYPE_AREA
Imagick::RESOURCETYPE_DISK
Imagick::RESOURCETYPE_FILE
Imagick::RESOURCETYPE_MAP
Imagick::RESOURCETYPE_MEMORY
getResourceLimit
您可以使用上面列出的相同常量查看当前使用的限制之一:
Imagick::getResourceLimit( $type )
我的建议
A. 利用缓存
B. 不要一直生成 Thumb
C. 使用作业排队系统(例如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();
}