Устранение эффекта красных глаз в PHP с помощью Imagick

Я пытаюсь адаптировать скрипт, доступный здесь [ http://www.fmwconcepts.com/imagemagick/redeye/index.php][1] в PHP, используя версию API Imagick.

На самом деле, выбор выполняется в 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 ответов

Другие вопросы по тегам