python文字生成图片

接到一个需求,将给出的文字自动生成图片。要求白底黑字,根据图片尺寸两边预留固定尺寸,文字自动居中。这里的一个难点就是计算文字的字号。
思路:根据宋体实验找了一下规律,每两个字号渲染尺寸会按双字节加一倍。也就是计算出双字个数,通过宽度剪去双边预留尺寸,再除以双字节个数就是字号。

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

你可能感兴趣的:(python文字生成图片)