下面是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
文件中。