0

Imagickの最新バージョンとPHP5.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上記の同じ定数を使用して、制限の 1 つが現在使用されているものを確認できます。

Imagick::getResourceLimit( $type )
于 2018-08-08T15:15:51.313 に答える
0

あなたは何をしようとしているのですか?ユーザーがページにアクセスするたびにサムネイルを作成しようとすると、CPUに非常に大きな負荷がかかることになります。これを解決するには、画像を1回だけ生成し、サムネイルディレクトリに保存します。

PHP.iniまたはini_setコマンドを使用して、特定のメモリ制限を持つようにPHPを設定することもできます。ここここを参照してください。

コマンドラインパラメータを自分で設定できない限り、imagemagickでメモリ制限を具体的に設定できるとは思いません(最後の回答はこちら

于 2012-04-24T11:59:01.613 に答える
0

私のアドバイス

A.キャッシュを活用する

B.常にThumbを生成しないでください

GearmanC.またはなどのジョブキューイングシステムを使用してbeanstalkd親指を生成し、すぐに実行する必要がないようにします。

例では、元のファイルが変更された場合にのみthumbを生成します

$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 に答える