【转载】不懂PS,但是懂Python的我,要用Python在获奖证书上写入获奖者的名字。

写上名字后是这样的

开始编程,将名字写入到证书图片上。

1、准备好证书或者奖状的图片。

2、准备好写入名字的字体,我比较喜欢华文楷体和华文行楷,你也可以准备自己喜欢的字体。(PS:需要的字体可以直接百度下载。)

注意!!!

确保字体文件、证书图片和代码文件在同一个文件夹中,因为这里我没有涉及路径。

3、导入PIL库,导入这个库还有点不一样。

直接在cmd中,pip3 install PIL,还不行呢,这个我请教过刘老师,具体原因大家可以看点击原文阅读查看。

这里需要通过pip3 install Pillow进行安装。

4、导入需要使用的库,有了这些库,后面就好办了。

import PIL
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

5、设置图片上名字使用的字体和大小,"华文行楷.ttf"这个名字就是文件夹中的字体文件名字,40对应字体大小。可以根据需要自己调节。

#设置所使用的字体
font = ImageFont.truetype("华文行楷.ttf", 40)

6、"证书.jpg"对应需要使用的证书或者奖状的文件名,通过Image.open将图片文件打开使用,然后其它绘画在该图片上绘制名字。

#打开图片
imageFile = "证书.jpg"
img = Image.open(imageFile)
#画图
draw = ImageDraw.Draw(img)

7、使用name变量指向需要写入的名字。

这里通过循环每一个字符计算出字符串name的长度和高度,目的是为了使得输入后的文字在图片里可以居中。因为文字写入的方式,是从确定写入点的起始坐标开始的,如果2个字确定的坐标是(0,0),当字符串是3个字的时候,从(0,0)开始就会显得靠右了。

name = "小溪流"
# 获取字体宽度,目的是为了将文字标准的居中。
sum_width = 0
sum_height = 0
for char in name:
width, height = draw.textsize(char, font)
sum_width += width
sum_height = height
# 获取字体宽度,目的是为了将文字标准的居中

8、img.size[0]获取的是图片的宽度,img.size[1]获取的是图片的高度。

图片的宽度/2-字符串的宽度/2=刚好计算出字符串居中的X坐标起点

图片的高度/2-字符串的高度/2=刚好计算出字符串居中的Y坐标起点

使用RBG(0,0,0)格式来设置字符串颜色。

#写字,img.size[0]图片的宽,img.size[1]图片的高,(数字1,数字2)开始写字的坐标位置,name写的什么,(0,0,0)RBG 
#设置文字位置/内容/颜色/字体
draw.text((img.size[0]/2 - sum_width/2, img.size[1]/2 - sum_height/2), name, (0, 0, 0), font=font, bold=True) 
# 将文字画上去
draw = ImageDraw.Draw(img)

9、将写好名字的证书保存好,并且重新命名。

#另存图片
img.save("证书-"+name+".jpg")
print("证书生成完毕!!!" )

10、耶,我获奖啦!!!