0

このコードスニペット(「ビネット」効果)をImagickで実装しようとしていますが、処理が非常に遅くなります。

set_time_limit(90);
$iterator = $imagick->getPixelIterator();
$width = $imagick->getImageWidth();
$height = $imagick->getImageHeight();

foreach($iterator as $y => $pixels){
  foreach($pixels as $x => $pixel){

    $l = 1 - 0.7 * (1 - pow((sin(M_PI / $width * $x) * sin(M_PI / $height * $y)), 0.4));       

    extract($pixel->getColor());   

    $pixel->setColor(sprintf('rgb(%d,%d,%d)', $r * $l, $g * $l, $b * $l));
  }

  $iterator->syncIterator();
}

オリジナル:

ここに画像の説明を入力してください

結果:

ここに画像の説明を入力してください

1600x1200の画像の場合、画像が処理されるまでに35秒ほどかかります。これを行うためのより良い方法はありますか?

4

1 に答える 1

2

あなたがしているのはオーバーキルですImageMagicはすでに-vignetteコマンドを持っています

convert input.jpg -background black -vignette 70x80 output.png

オリジナル

ここに画像の説明を入力してください

最終出力

ここに画像の説明を入力してください

于 2012-10-30T17:56:15.013 に答える