小言_互联网的博客

Pygame在图片上写汉字

347人阅读  评论(0)

一、由来

最近一直在做写汉字的东西,总结了一下,以我所知,有这几种方法:

  • 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接口大全.


转载:https://blog.csdn.net/DeepLearningJay/article/details/102487856
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场