You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:10:01