Я работаю над imagick (PHP) и хочу наложить маску на изображение. В принципе, работает нормально. Но это не работает так, как ожидалось, когда приходится иметь дело с прозрачностью на основном изображении. Позвольте мне объяснить это.
Исходное изображение (SD)
Изображение маски (TPL)
Результат изображения 🙁 (DEST)
Ожидаемый результат
Как вы можете видеть на изображениях, прозрачность источника не зависит от результата …
Итак, вот мой код:
$sd = 'tiger.png';
$tpl = 'tpl.png';
$dest = 'tiger_cut.png';
$base = new Imagick($sd);
$mask = new Imagick($tpl);
$base->compositeImage($mask, Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
$base->writeImage($dest);
Я попробовал несколько вариантов CompositImage (), но … не смог найти правильный (-ые).
Заранее спасибо за помощь 🙂
Вот решение:
$sd = 'tiger.png';
$tpl = 'tpl.png';
$dest = 'tiger_cut.png';
$base = new Imagick($sd);
$mask = new Imagick($tpl);
$base->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
$base->writeImage($dest);
Других решений пока нет …