Устранение эффекта красных глаз в 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