Я очень мало разбираюсь в обработке изображений и даже в меньшей степени от используемой терминологии, поэтому, пожалуйста, несите меня.
В принципе, я хочу объединить два изображения вместе, где один из них будет действовать как маска. Это изображение выглядит примерно так:
Где синий и желтый фон в действительности прозрачны.
Это изображение используется в качестве маски для обычных фотографий. Части фотографии, которые «торчат» из круга, нужно «обрезать» (сделать невидимыми), в то время как внутренняя часть остается видимой.
Итак, все, что приходит в синюю область, невидимо, все в желтой области видимо.
Я честно не знаю, как это сделать, поэтому любая помощь будет очень признательна!
Редактировать:
Я использую версию API Imagick, а не версию командной строки
Редактировать:
Чтобы получить представление о том, чего я хочу достичь, вот пример.
Входные изображения:
Это изображение маски, всегда одно и то же
Это пример изображения, динамического
Вот как должен выглядеть конечный результат:
Итак, наконец, это должно делать то, что вам нужно:
Исходное изображение:
Маска непрозрачности:
Overlay:
Вывод:
Код:
<?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