Próbuję odtworzyć skrypt, który wykorzystuje komendę ImageMagick "konwertuj" do komponowania obrazu. Ale chcę zrobić to samo w PHP używając Imagick (wersja 6.6.2-10).Imagick: skomponuj z maską
Polecenie jest następujące:
convert A1.mpc A3.mpc A4.mpc -channel rgba -alpha on -virtual-pixel background -background none -define compose:args=312x26.6776 -compose displace -composite out.mpc
I okazało się, że parametry stoją za:
convert {background} {overlay} [{mask}] [-compose {method}] -composite {result}
PHP Imagick daje mi sposób komponować, ale bez parametru maski: http://www.php.net/manual/en/imagick.compositeimage.php
Znalazłem another question i próbowałem tego (ale nie dało tego samego obrazu):
// load images
$a1 = new Imagick('a1.png');
$a3 = new Imagick('a3.png');
$a4 = new Imagick('a4.png');
// mask the overlay
$a1->compositeImage($a4, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
// compose overlay to background
$a1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BACKGROUND);
$a1->setImageBackgroundColor(new ImagickPixel('none'));
$a1->setOption('compose:args', '312x26.6776');
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0);
Moje pytanie brzmi: czy jest to właściwy sposób komponowania obrazu za pomocą maski? A co tu jest nie tak?
Aby pomóc w wizualizacji, co chcę zrobić, oto kilka zdjęć wejściowe:
obrazu wejściowego A1 (tło):
wejścia obrazu a3 (overlay):
obraz wejściowy a4 (maska):
co chcę być wynikiem:
Co mój kod php tworzy:
Dzięki z góry! Michael
dlaczego nie można użyć flagi COMPOSITE_OVERLAY – artragis