详解如何在Python中用pillow在图片上添加文字

  • Post category:Python

下面是Python使用Pillow添加文字的完整攻略:

1. 安装Pillow

在终端输入以下指令即可安装Pillow:

pip install Pillow

2. 导入Pillow和图片

首先要导入Pillow库并打开要添加文字的图片,可以使用以下的代码:

from PIL import Image, ImageDraw, ImageFont

# 打开图片
image = Image.open('example.jpg')

3. 创建一个Draw对象

创建一个Draw对象,用于在图片上绘制文字。如果需要在图片上添加多个文字,则需要创建多个Draw对象,每个对象负责绘制一个文字。可以使用以下代码创建一个Draw对象:

# 创建Draw对象
draw = ImageDraw.Draw(image)

4. 在图片上添加文字

现在已经准备好了添加文字的工具,可以使用以下代码在图片上添加文字:

# 定义字体和字号
font = ImageFont.truetype('arial.ttf', 36)

# 定义文字内容
text = 'Hello, World!'

# 定义文字颜色
color = (255, 0, 0)

# 定义文字的坐标位置
position = (50, 50)

# 在图片上绘制文字
draw.text(position, text, color, font)

需要说明一下的是,上述代码中的 arial.ttf 是字体文件的名称,需要根据实际的字体文件更改。在添加文字时,还可以设置其他的参数,如字体的粗细、字体的斜体等。

示例1:在图片上添加字幕

接下来,我们将演示如何使用Pillow在视频截图上添加字幕。假设我们有一个视频文件 test.mp4 ,并截取了一张截图 screenshot.jpg,现在需要在图片上添加一条字幕。

from PIL import Image, ImageDraw, ImageFont
import subprocess

# 获取视频截图
subprocess.call(['ffmpeg', '-ss', '00:00:30', '-i', 'test.mp4', '-vframes', '1', 'screenshot.jpg'])

# 打开图片
image = Image.open('screenshot.jpg')

# 创建Draw对象
draw = ImageDraw.Draw(image)

# 定义字体和字号
font = ImageFont.truetype('arial.ttf', 36)

# 定义文字内容
text = '这是一条测试字幕'

# 定义文字颜色
color = (255, 255, 255)

# 计算文字的坐标位置,使其位于图片的底部居中
text_width, text_height = draw.textsize(text, font)
x = (image.width - text_width) / 2
y = image.height - text_height - 50

# 在图片上绘制文字
draw.text((x, y), text, color, font)

# 保存图片
image.save('result.jpg')

上述代码中使用了FFmpeg工具获取视频截图。代码中的 00:00:30 表示从视频的第30秒开始截图,可以根据需要更改。

示例2:生成验证码图片

接下来,我们将演示如何使用Pillow生成验证码图片。验证码图片通常包含了随机生成的字符或数字,可以用于网站的登录验证等功能。

from PIL import Image, ImageDraw, ImageFont
import random
import string

# 定义图片的宽和高
width = 120
height = 30

# 创建一个空白图片
image = Image.new('RGB', (width, height), (255, 255, 255))

# 创建Draw对象
draw = ImageDraw.Draw(image)

# 定义字体和字号
font = ImageFont.truetype('arial.ttf', 18)

# 定义每个字符的颜色
colors = [(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (128, 0, 128)]

# 随机生成4个字符
text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=4))

# 在图片上绘制字符
for i in range(4):
    x = i * width // 4 + 10
    y = random.randint(0, height - 20)
    c = random.choice(colors)
    draw.text((x, y), text[i], c, font)

# 添加噪点和线条
for i in range(100):
    x = random.randint(0, width)
    y = random.randint(0, height)
    c = random.choice(colors)
    draw.point((x, y), c)

for i in range(5):
    x1 = random.randint(0, width)
    y1 = random.randint(0, height)
    x2 = random.randint(0, width)
    y2 = random.randint(0, height)
    c = random.choice(colors)
    draw.line((x1, y1, x2, y2), c)

# 保存图片
image.save('captcha.jpg')

上述代码中,首先创建了一个空白的图片,然后使用随机生成的字符在图片上绘制了字符,最后添加了噪点和线条。生成的验证码图片保存在当前目录下的 captcha.jpg 文件中。