如何在Python中绘制背景为图片的透明填充文字?
没问题!用Python的Pillow库就能轻松实现你想要的效果——让背景图片透过透明的文字区域显示出来。核心思路是通过**遮罩(mask)**来控制图像的合成:先做一个文字形状的遮罩,再用这个遮罩把背景图的对应区域“贴”到纯色画布上,这样文字部分就会显示背景,其余区域是你设定的底色。
下面是完整的实现步骤和代码:
实现步骤与代码
1. 先安装依赖库
如果你还没装Pillow,先通过pip安装:
pip install pillow
2. 完整代码示例
from PIL import Image, ImageDraw, ImageFont # 加载背景图片,转成RGBA格式支持透明通道 bg_img = Image.open("background.jpg").convert("RGBA") img_width, img_height = bg_img.size # 创建一个和背景图同尺寸的纯色画布(这里用黑色作为文字外的底色,可自行修改) text_canvas = Image.new("RGBA", (img_width, img_height), (0, 0, 0, 255)) draw = ImageDraw.Draw(text_canvas) # 设置字体:优先用自定义字体,找不到就用默认字体 try: # 替换成你的字体路径,比如Windows下的"msyh.ttc",或者自定义字体文件 font = ImageFont.truetype("arial.ttf", 160) except IOError: font = ImageFont.load_default() # 定义要显示的文字,并计算居中位置 target_text = "PYTHON" text_width, text_height = draw.textsize(target_text, font=font) pos_x = (img_width - text_width) // 2 pos_y = (img_height - text_height) // 2 # 创建文字遮罩:灰度图,白色区域对应文字位置,黑色是其余区域 text_mask = Image.new("L", (img_width, img_height), 0) mask_draw = ImageDraw.Draw(text_mask) mask_draw.text((pos_x, pos_y), target_text, fill=255, font=font) # 合成图像:用遮罩控制,只把背景图的文字区域贴到纯色画布上 text_canvas.paste(bg_img, (0, 0), mask=text_mask) # 保存结果或直接显示 text_canvas.save("text_with_bg.png") text_canvas.show()
关键细节说明
- 遮罩的作用:灰度遮罩中,白色(255)区域会让背景图的像素透过来,黑色(0)区域保留纯色画布的底色,完美实现“文字显示背景”的效果。
- 自定义调整:
- 你可以修改纯色画布的颜色,比如把
(0,0,0,255)换成(255,255,255,255)就是白色底色。 - 字体大小、样式都可以通过
ImageFont.truetype调整,记得替换成你本地存在的字体文件路径。 - 文字位置可以修改
pos_x和pos_y,实现左对齐、上对齐等不同布局。
- 你可以修改纯色画布的颜色,比如把
如果运行时遇到字体找不到的问题,直接用ImageFont.load_default()就能调用系统默认字体,虽然样式普通但能保证正常运行~
内容的提问来源于stack exchange,提问作者Bipul Jain




