0

我正在使用 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();

谢谢。

4

3 回答 3

1

我相信您可以使用以下方法更改 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 )
于 2018-08-08T15:15:51.313 回答
0

你想做什么?如果您尝试在每次用户访问该页面时创建缩略图,您将很快在 CPU 上创建一个非常重的负载。您可以通过仅生成一次图像并将其保存到缩略图目录来解决此问题。

您还可以使用 PHP.ini 或 ini_set 命令将 PHP 设置为具有特定的内存限制。见这里这里

我不认为你可以在 imagemagick 中专门设置内存限制,除非你可以自己设置命令行参数(最后一个答案在这里

于 2012-04-24T11:59:01.613 回答
0

我的建议

A. 利用缓存

B. 不要一直生成 Thumb

C. 使用作业排队系统(例如Gearmanbeanstalkd来生成拇指,这样您就不必立即进行操作)

示例仅在修改原始文件时生成拇指

$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();
}
于 2012-04-24T12:27:05.737 回答