Как использовать Imagick для слияния и маскировки изображений?

Я очень мало разбираюсь в обработке изображений и даже в меньшей степени от используемой терминологии, поэтому, пожалуйста, несите меня.

В принципе, я хочу объединить два изображения вместе, где один из них будет действовать как маска. Это изображение выглядит примерно так:
пример
Где синий и желтый фон в действительности прозрачны.

Это изображение используется в качестве маски для обычных фотографий. Части фотографии, которые «торчат» из круга, нужно «обрезать» (сделать невидимыми), в то время как внутренняя часть остается видимой.
Итак, все, что приходит в синюю область, невидимо, все в желтой области видимо.

Я честно не знаю, как это сделать, поэтому любая помощь будет очень признательна!

Редактировать:
Я использую версию API Imagick, а не версию командной строки

Редактировать:
Чтобы получить представление о том, чего я хочу достичь, вот пример.

Входные изображения:
введите описание изображения здесь
Это изображение маски, всегда одно и то же

введите описание изображения здесь
Это пример изображения, динамического

введите описание изображения здесь
Вот как должен выглядеть конечный результат:

Итак, наконец, это должно делать то, что вам нужно:

Исходное изображение:

http://i.stack.imgur.com/b7seR.png

Маска непрозрачности:

введите описание изображения здесь

Overlay:

http://i.stack.imgur.com/3ulkM.png

Вывод:

введите описание изображения здесь

Код:

<?php $base = new Imagick('U0R4F.png'); $mask = new Imagick('mask.png'); $over = new Imagick('3ulkM.png'); // Setting same size for all images $base->resizeImage(274, 275, Imagick::FILTER_LANCZOS, 1); // Copy opacity mask $base->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA); // Add overlay $base->compositeImage($over, Imagick::COMPOSITE_DEFAULT, 0, 0); $base->writeImage('output.png'); header("Content-Type: image/png"); echo $base; ?> 

Я надеюсь, что это прямо сейчас! Примечание. В вашем примере похоже, что вы уменьшили масштабное изображение, которое у меня не было (моя цель – просто показать, как выполняется маскировка).

Вы попробовали это решение здесь, как описано в: https://stackoverflow.com/a/2351173/1093649 ?

Запустите это на своем сервере (с правильными именами изображений!) И сообщите нам, спасибо.

nb: кредиты идут в jspash

http://www.imagemagick.org/Usage/compose/#dstin должен сделать трюк, но вам нужно использовать изображения с альфа-каналами (это не должно быть проблемой).

Изменить: в PHP вы должны передать его ( imagick::COMPOSITE_DSTIN ) в качестве параметра в составном изображении . Другие фильтры в Composite Operator Constants также могут быть вам полезны.

Этот тип маскировки рассматривается с использованием нескольких различных методов в ImageMagick-примерах, эскизах, масках и красках. http://www.imagemagick.org/Usage/thumbnails/#mask_paint

Однако следует предупредить, что маскирование и края наложенного изображения СЛЕДУЕТ НЕ СЧИТАТЬ, это важно, или вы можете столкнуться с проблемами с эффектами краевого сглаживания, которые лучше всего избежать.

Извлечение альфа-маски кольца может быть выполнено с использованием операторов морфологии, чтобы уменьшить его до осевой линии, можно использовать для создания маски для любой случайной «кольцевой» формы. Примеры ImageMagick, Скелеты путем Thinning и обрезки http://www.imagemagick.org/Usage/morphology/#thinning_skeleton

Энтони Тиссен Веб-мастер для примеров ImageMagick и разработчик для ImageMagick

PS: хорошая фотография из Elfling