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

如何叠加图片并实现深色背景透明?paste函数仅显示单图问题解析

问题解答

为什么paste()只显示test2?

PIL.Image.paste()是直接像素替换操作,会把im2的所有像素完全覆盖到im1对应位置,不会做任何混合,所以原im1被完全覆盖,最终只能看到im2。

实现图片叠加并让深色背景透明的方案

1. 先将test2的深色背景转为透明

因为你的图片是RGB格式,首先要转为带Alpha通道的RGBA格式,再通过像素阈值过滤深色背景:

from PIL import Image
import numpy as np

# 打开并转为RGBA格式
im1 = Image.open('test1.jpg').convert('RGBA')
im2 = Image.open('test2.jpg').convert('RGBA')

# 转为numpy数组处理背景
im2_arr = np.array(im2)
# 设定深色阈值(RGB值均低于该值则判定为背景)
dark_thresh = 50
# 筛选出深色区域
dark_area = (im2_arr[:, :, 0] < dark_thresh) & (im2_arr[:, :, 1] < dark_thresh) & (im2_arr[:, :, 2] < dark_thresh)
# 将深色区域的Alpha通道设为0(完全透明)
im2_arr[dark_area, 3] = 0
# 转回PIL图像
im2_trans = Image.fromarray(im2_arr)

2. 叠加透明后的图片到test1

有两种常用方法:

方法一:用alpha_composite()实现透明叠加

该方法要求两张图都为RGBA格式,会自动处理透明通道:

# 直接合成
final_img = Image.alpha_composite(im1, im2_trans)
# 保存为PNG(JPG不支持透明通道)
final_img.save('final_transparent.png')

方法二:用paste()配合掩码粘贴

指定im2的Alpha通道作为掩码,只粘贴非透明区域:

im1.paste(im2_trans, mask=im2_trans)
im1.save('final_transparent.png')

额外:实现半透明混合叠加(无需背景透明)

如果只是想让两张图半透明混合显示,不用处理背景,直接用blend():

im1_rgba = im1.convert('RGBA')
im2_rgba = im2.convert('RGBA')
# alpha参数控制im2的透明度,0.0显示全im1,1.0显示全im2
blended_img = Image.blend(im1_rgba, im2_rgba, alpha=0.5)
blended_img.save('blended_result.png')

内容的提问来源于stack exchange,提问作者Harsh Ambardekar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:02:09