python文字生成图片
2022-03-03 本文已影响0人
LCSan
接到一个需求,将给出的文字自动生成图片。要求白底黑字,根据图片尺寸两边预留固定尺寸,文字自动居中。这里的一个难点就是计算文字的字号。
思路:根据宋体实验找了一下规律,每两个字号渲染尺寸会按双字节加一倍。也就是计算出双字个数,通过宽度剪去双边预留尺寸,再除以双字节个数就是字号。
import math
from PIL import Image, ImageFont, ImageDraw
def CreatePic(text,imgPath,size=[500,500],margin=50,backgroundRGB=[255,255,255],fontType=r'C:\Windows\Fonts\simsun.ttc',fontRGB=[0,0,0]):
size=tuple(size)
backgroundRGB=tuple(backgroundRGB)
fontRGB=tuple(fontRGB)
image = Image.new('RGB', size, backgroundRGB) # 设置画布大小及背景色
iwidth, iheight = image.size # 获取画布高宽
# 计算字节数,GBK编码下汉字双字,英文单字。都转为双字计算
size=len(text.encode('gbk'))/2
# 计算字体大小,每两个字号按字节长度翻倍。
fontSize=math.ceil((iwidth-(margin*2))/size)
font = ImageFont.truetype(fontType, fontSize) # 设置字体及字号
draw = ImageDraw.Draw(image)
fwidth, fheight = draw.textsize(text, font) # 获取文字高宽
owidth, oheight = font.getoffset(text)
fontx = (iwidth - fwidth - owidth) / 2
fonty = (iheight - fheight - oheight) / 2
draw.text((fontx, fonty), text, fontRGB, font)
image.save(imgPath) # 保存图片
if __name__ == "__main__":
CreatePic("今天天气不错呀","1.jpg")
效果:
1.jpg