PHP图像叠加:仅在底层非透明区域应用顶层图像
问题:如何限制颜色/图案仅叠加在服装层非透明区域并保留光影?
我已查阅谷歌十余篇文章、Stack Overflow及PHP文档,但未找到对应解决方案。需求类似服装网站:仅改变服装颜色,保留光影。已知可通过PHP实现:背景层、模特层、带透明背景的灰度服装层,叠加带透明背景的颜色/图案层后,将服装层叠加到模特层再到背景层。我尝试过Imagick、GD及部分库,但颜色/图案叠加未限制在服装区域,而是覆盖所有图层;COMPOSITE_ATOP仅部分生效,光影无法透出。如何将叠加限制在服装层的非透明像素?
附上Imagick代码:
<?php // PHP8.1 $backgroundImage = new Imagick('./img/background.png'); $shadows = new Imagick('./img/feet.png'); $backgroundImage->compositeImage($shadows, Imagick::COMPOSITE_DEFAULT, 0, 0); $rightleg = new Imagick('./img/right-leg.png'); $w = $rightleg->getImageWidth(); $h = $rightleg->getImageHeight(); $image = new Imagick('./img/right-leg-color.png'); $rightleg->compositeImage($image, Imagick::COMPOSITE_OVERLAY, 0, 0); $backgroundImage->compositeImage($rightleg, Imagick::COMPOSITE_DEFAULT, 0, 0); $leftleg = new Imagick('./img/left-leg.png'); $backgroundImage->compositeImage($leftleg, Imagick::COMPOSITE_DEFAULT, 0, 0); if (true) { header('Content-Type: image/png'); echo $backgroundImage; } else { $rightleg->writeImage('test.png'); } // Clean up resources $backgroundImage->clear(); $backgroundImage->destroy(); $shadows->clear(); $shadows->destroy(); $rightleg->clear(); $rightleg->destroy(); $leftleg->clear(); $leftleg->destroy();
当前合成效果如下:
内容的提问来源于stack exchange,提问作者Bill in Kansas City
相关产品推荐
相关产品推荐

