Python学习
【小白学Python】自定义图片的生成(一)
1. 文件内容
正如上篇文章所说,我需要读取txt文件的文字内容,将文字内容填充到图片上,按照一定规则生成多个图片。
文件大致内容如下
2.生成图片规则
txt是之前从zhihu问答模块尝试爬取的,可以看出来,上述文字是以问答形式呈现的,生成图片规则有两个:
- 每个QA的文字单独一张图片,Q一行,A一行。
- 去掉**@之后,:**之前的文字。
3. 修改代码
上一篇的完整代码如下
from PIL import Image, ImageDraw, ImageFont
# 设置图片大小
width, height = 800, 800
image = Image.new('RGB', (width, height), color='black')
# 设置文字
text = "123456"
# 加载字体文件,并设置字体大小
# 注意:确保arial.ttf字体文件路径是正确的
font = ImageFont.truetype('C:\\Windows\\Fonts\\arial.ttf', 60)
# font.color = 'yellow'
# 创建画布
draw = ImageDraw.Draw(image)
# 使用draw的textsize方法获取文本大小
text_width, text_height = draw.textsize(text, font=font)
# 计算文字位置,使其居中
x = (width - text_width) / 2
y = (height - text_height) / 2
# 绘制文字
draw.text((x, y), text, font=font, fill='white')
# 保存图片
image.save('text_image.png')
2.1 尝试一行汉字展示
替换代码如下
执行main.py,查看生成的图片,有问题,乱码了。
搜索后发现是字体使用的不兼容,更换字体为simhei.ttf
,图片文字正常展示。
调整图片长宽为 width, height = 600, 900
,文字位置为
x = (width - text_width) / 2
y = (height - text_height) / 3.5
执行main.py,目前看起来运作一切良好。
3.1 读取txt文件
为了读取指定的txt文件,我们对上述代码做了如下改动
- 使用
file.readlines()
一次性读入所有txt内容,大文件需要注意,内存可能会爆 - 根据文件内容,每4行拼接一次text,并生成一个图片