You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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_xpos_y,实现左对齐、上对齐等不同布局。

如果运行时遇到字体找不到的问题,直接用ImageFont.load_default()就能调用系统默认字体,虽然样式普通但能保证正常运行~

内容的提问来源于stack exchange,提问作者Bipul Jain

火山引擎 最新活动