使用Python从黑白图片提取黑色区域制作水印
实现黑白图片黑色区域水印叠加(支持任意位置)
核心思路
利用Pillow的RGBA通道特性,将水印图中的白色背景转为完全透明,只保留黑色区域作为水印,再将其粘贴到目标图片的指定位置。
完整代码
from PIL import Image # 加载图片 watermark_img = Image.open("Z9yFZ.jpg").convert("RGBA") # 转为RGBA模式以支持透明通道 target_img = Image.open("Uh4LU.jpg").convert("RGBA") # 获取水印图的尺寸 w_width, w_height = watermark_img.size # 处理水印:将白色背景转为透明 processed_watermark = Image.new("RGBA", watermark_img.size, (255, 255, 255, 0)) for x in range(w_width): for y in range(w_height): r, g, b, a = watermark_img.getpixel((x, y)) # 判断是否为白色(可根据实际水印图调整阈值) if r > 240 and g > 240 and b > 240: # 白色背景设为完全透明 processed_watermark.putpixel((x, y), (r, g, b, 0)) else: # 黑色区域保留不透明状态 processed_watermark.putpixel((x, y), (0, 0, 0, 255)) # 指定水印位置:示例为右下角,距离边缘50像素 # 修改x、y值即可调整到任意位置 position_x = target_img.width - w_width - 50 position_y = target_img.height - w_height - 50 # 将水印粘贴到目标图,用水印自身的alpha通道做遮罩 target_img.paste(processed_watermark, (position_x, position_y), processed_watermark) # 保存结果:JPG需转RGB模式,PNG可直接保存RGBA target_img.convert("RGB").save("watermarked_result.jpg")
关键说明
- 透明处理:通过RGB阈值判断白色区域,将对应像素的alpha通道设为0,实现背景透明;阈值可根据你的水印图实际情况微调。
- 任意位置调整:修改
position_x和position_y即可改变水印位置,比如左上角设为(50, 50),居中则计算为(target_img.width//2 - w_width//2, target_img.height//2 - w_height//2)。 - 格式兼容:JPG不支持透明通道,保存前需转RGB;若需保留透明效果,可直接保存为PNG格式。
内容的提问来源于stack exchange,提问作者gus
相关产品推荐
相关产品推荐

