想象一下像素迭代器 - 非常慢

时间:2012-10-30 16:54:34

标签: php performance image-processing imagemagick

我正在尝试用Imagick实现this code snippet(一个“小插图”效果),但处理速度非常慢:

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();
}

原件:

enter image description here

结果:

enter image description here

对于1600x1200图像,处理图像需要35秒。有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

你正在做的是过度杀死ImageMagic已经有-vignette命令

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

<强>原始

enter image description here

最终输出

enter image description here