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

Python实现Color Burn混合模式与Photoshop效果不符,求正确公式

Color Burn混合模式正确公式及代码修正

问题描述

我尝试在Python中应用Color Burn模式混合两张图片,但得到的效果模糊不清,且与Photoshop中的Color Burn模式不一致。我基于tkinter开发了界面,可调整带黑色文字的叠加图的尺寸、坐标及颜色(从黑色改为白色),当前使用的公式为B(A,F)=1−(1−A)/F,求正确的混合公式。

错误原因

你当前的公式搞反了**底层图片(Base)和混合层图片(Blend)**的角色。Color Burn的核心逻辑是用混合层加深底层颜色,计算时需以底层颜色为基础,结合混合层的值推导结果,而非反过来。

正确的Color Burn公式

Color Burn的标准计算逻辑(针对单个颜色通道,数值范围0-1):

  • 若混合层通道值为0(纯黑),结果直接保留底层通道值
  • 否则,结果 = 1 - (1 - 底层通道值) / 混合层通道值

转换为0-255的整数范围后,更高效且避免浮点模糊的计算方式为:

# 单通道计算示例
result_channel = 255 if blend_channel == 0 else max(0, 255 - (255 - base_channel) * 255 // blend_channel)

代码修正

替换原代码中逐像素混合的部分:

# 替换原有的Color Burn计算逻辑
for i in range(img1.size[0]):
    for j in range(img1.size[1]):
        r1, g1, b1, a1 = pixel_data1[i, j]  # 底层图片(base)
        r2, g2, b2, a2 = pixel_data2[i, j]  # 混合层图片(blend)
        
        # 仅在混合层不透明的区域应用混合
        if a2 > 0:
            # 计算每个通道的Color Burn结果
            r = 255 if r2 == 0 else max(0, 255 - (255 - r1) * 255 // r2)
            g = 255 if g2 == 0 else max(0, 255 - (255 - g1) * 255 // g2)
            b = 255 if b2 == 0 else max(0, 255 - (255 - b1) * 255 // b2)
            pixel_data1[i, j] = (int(r), int(g), int(b), a1)
        # 混合层透明时,保留底层原颜色

额外优化建议

  • 避免逐像素循环:用numpy批量处理可大幅提升速度,同时减少浮点精度导致的模糊问题:
# numpy优化版混合逻辑
base_np = np.array(img1).astype(np.float32) / 255.0
blend_np = np.array(img2).astype(np.float32) / 255.0

# 分离RGB通道与透明度
base_rgb = base_np[..., :3]
blend_rgb = blend_np[..., :3]
alpha = blend_np[..., 3:4]

# 计算Color Burn,忽略除以0的警告
with np.errstate(divide='ignore', invalid='ignore'):
    burn_rgb = 1 - (1 - base_rgb) / blend_rgb
# 处理混合层为0的情况,同时限制数值范围在0-1之间
burn_rgb = np.where(blend_rgb == 0, base_rgb, burn_rgb)
burn_rgb = np.clip(burn_rgb, 0, 1)

# 合并透明度,仅在混合层区域应用效果
result_rgb = (1 - alpha) * base_rgb + alpha * burn_rgb
result_np = np.concatenate([result_rgb * 255, base_np[..., 3:4] * 255], axis=-1).astype(np.uint8)

blended_img = Image.fromarray(result_np)

内容的提问来源于stack exchange,提问作者Seany Lip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:54:54