有一个需求,甲方发了一堆的字体包,让我去嵌入,但是为了美观性,我还需要展示对应字体包的预览图,所以这就需要我来去生成了,因此写了一个省事的代码
fromPILimportImage,ImageDraw,ImageFontimportos# ===== 配置项 =====TEXT="小花帽"IMAGE_SIZE=(200,200)FONT_SIZE=36BG_COLOR="#f0f0f0"TEXT_COLOR="#000000"FONT_DIR="/Users/apple/Documents/font"OUTPUT_DIR="./icon"# ==================os.makedirs(OUTPUT_DIR,exist_ok=True)# 支持 ttf / otffont_files=[fforfinos.listdir(FONT_DIR)iff.lower().endswith((".ttf",".otf"))]forfont_fileinfont_files:font_path=os.path.join(FONT_DIR,font_file)# 加载字体font=ImageFont.truetype(font_path,FONT_SIZE)# 创建画布img=Image.new("RGB",IMAGE_SIZE,BG_COLOR)draw=ImageDraw.Draw(img)# 精准居中(考虑字体基线)bbox=draw.textbbox((0,0),TEXT,font=font)text_width=bbox[2]-bbox[0]text_height=bbox[3]-bbox[1]x=(IMAGE_SIZE[0]-text_width)//2y=(IMAGE_SIZE[1]-text_height)//2# 绘制文字draw.text((x,y),TEXT,fill=TEXT_COLOR,font=font)# 输出文件名name=os.path.splitext(font_file)[0]out_path=os.path.join(OUTPUT_DIR,f"{name}.png")img.save(out_path,"PNG")print(f"✔ 生成完成:{out_path}")运行就可以生成所有包的图片了
如此,这样就可以通过字体包,直接生成对应字体预览图,省事