一、由来
最近一直在做写汉字的东西,总结了一下,以我所知,有这几种方法:
- 1、用PIL实现在一张图片上写汉字
- 2、用freetype实现
还有最近我才找到的:
- 3、用Pygame来实现在图片上写汉字
二、踩坑
方法 | 缺点 |
---|---|
PIL | 弄了很久,发现无法对字体的样式进行增加,例如加粗(我试过用膨胀来做),斜体,下划线等等,而且还有一个很大的坑,输出的汉字字体默认为加粗样式,而不是正常的细体,这对于我来说影响很大。 |
freetype | 功能应该挺齐全,能实现各种需求,但是网上资源太少(于我而言),我找了很久,放弃了,官方文档也没看明白。 |
Pygame | 个人认为较为简单,功能强大,能满足我的需求 |
三、总结
我之前用PIL生成过一次字体的数据,结果是,发现PIL做出来的文字本身默认加粗,无法模拟正常粗细的汉字。
四、整合代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/10/10 下午3:15
# @Author : Jay.Chen
# @File : Pygame_fonts.py
# @Software: PyCharm
import pygame
import os
from PIL import Image
# 生成图像
image = Image.new('RGB', (512, 224), (255, 255, 255))
# 将图像保存下来
image.save(open(str(1) + '.png', 'wb'), 'png')
# 初始化
pygame.init()
# 读取图像
img = pygame.image.load('1.png')
# 导入字体
fontType = os.path.join("fonts/simsun.ttc")
# 设置一个字体对象
fontObject = pygame.font.Font(fontType, 32)
#得到预计输入字体的所需大小
# print(fontObject.size('xs'))
#设置加粗
# fontObject.set_bold(True)
#设置斜体
# fontObject.set_italic(True)
#设置下划线
# fontObject.set_underline(True)
#创建文本surface
create_text = fontObject.render('我是宋体写出来的。\n能换行吗', True, (0, 0, 0), (255, 255, 255)) #文本、抗锯齿、字体颜色、背景颜色
#surface的复制
img.blit(create_text, (50, 50)) #文本surface、复制到目标surface的起始坐标
#保存
pygame.image.save(img, 'b.png')
效果图
END
更多Pygame的用法和细节,不妨看看官网的文档,官网就不贴了。
还可以看看这个链接: Pygame接口大全.