使用Imagick删除PHP中的红眼

时间:2015-02-09 14:54:58

标签: php imagemagick imagick

我尝试使用Imagick的API版本在PHP中调整此处[http://www.fmwconcepts.com/imagemagick/redeye/index.php][1]提供的脚本。

实际上,选择是在jQuery中完成的,然后传递给下面的脚本来绘制选择。

到目前为止,这是我的代码:

<?php
    extract($_POST);

    // Load the original image
    $image = new Imagick($path);

    // Duplicate and desaturate the original image
    $image2 = clone $image;
    $image2->modulateImage(15, 0, 100);

    // Create the mask on which the selection will be drawn
    $image3 = clone $image;
    $image3->colorfloodfillimage(new ImagickPixel('white'), 18, new ImagickPixel('white'), 0, 1);

    foreach ($redeye as $selection){
        try{
            $draw = new ImagickDraw();
            $draw->setstrokewidth(0);
            $draw->setstrokecolor(new ImagickPixel('black'));
            $draw->setFillColor(new ImagickPixel( 'black' ));
            $draw->setfillalpha(1);
            $draw->ellipse( $selection['ox'], $selection['oy'], $selection['rx'], $selection['ry'], 0, 360 );
            $image3->drawImage($draw);
        } catch (ImagickException $ie){
            echo $ie->getMessage();
        }
    }  
?>

我对图像处理知之甚少,并且不知道如何合并3层。 合并图层时,我真的不了解转换函数的代码。

非常感谢任何帮助!

编辑:

convert $tmpA1 $tmpA2 $tmpA3 -compose over -composite $tmpA2

据我所知,这应该使用API​​编写如下:

$image2->compositeImage($image3,Imagick::COMPOSITE_OVER, 0, 0);
$image2->compositeImage($image2,Imagick::COMPOSITE_OVER, 0, 0);
$image2->compositeImage($image,Imagick::COMPOSITE_OVER, 0, 0);

然后

convert $tmpA2 \( $tmpA1 -modulate 100,0,100 \) $tmpA4 -compose over -composite $outfile

应该这样写:

$image->modulateImage(100, 0, 100);
$image->compositeImage($image,Imagick::COMPOSITE_OVER,0, 0);
$image->compositeImage($image2,Imagick::COMPOSITE_OVER,0, 0);

但我不明白这一部分:

convert $tmpA3 ( +clone -morphology close disk:$rad $dilation ) -compose difference -composite -auto-level -negate -threshold 0 -negate $tmpA4

0 个答案:

没有答案