目录
前言
一、两类解决方法
二、具体示例代码
1.pygame库
2.PIL库
总结
前言
有一次在知乎上看到一篇有关家庭照顾痴呆老人的帖子,其中有个作者的回复让我很感慨,因此想保存成图片并分享给其他朋友。结果用wps将文本转成图片时,竟然要VIP会员才行。这我肯定是花不起这小钱的,所以直接想到用Python来实现这一功能。
提示:以下是本篇文章正文内容,下面案例可供参考
一、两类解决方法
关于如何将文字转成图片的相关wiki总结,网上有很多,大致可以分为这样两类:
1、使用pygame库
2、使用PIL库
二、具体示例代码
1.pygame库
代码如下(示例):
# encoding: utf-8
import pygame
import os
# pygame初始化
pygame.init()
# 待转换文字
with open('word.txt', 'r', encoding='utf-8')as f:
text = f.read()
# 设置字体和字号
font = pygame.font.SysFont(os.path.join("C:\\Windows\\Fonts\\", "simhei.ttf"), 64)
# 渲染图片,设置背景颜色和字体样式,前面的颜色是字体颜色
ftext = font.render(text, True, (65, 83, 130), (255, 255, 255))
# 保存图片
pygame.image.save(ftext, "word.jpg") # 图片保存地址
但是遇到2个问题:中文乱码和图片内容不规则。
对于中文乱码问题,很自然地想到是编码格式问题,尝试过u"{}".format(text)或者text.encode('gbk')、更换字体tff格式等方法都失败了。网上搜索了下,使用pygame库的帖子下面都有人在问,如何解决中文乱码如何解决。
因此,本人放弃了,是通过第2种方法实现的。
2.PIL库
简单说下代码逻辑:
(1)为了保证图片能和word格式一致,经常需要保证图片的长、宽与原word字数一致,因此通过
(fontSize * max_len), len(liens) * (fontSize + 5)来保证图片长宽
(2)因为我个人喜欢白底黑字,因此设置图片背景为(255,255,255),字体为#000000。如果不清楚要对应颜色的RGB值,可以在https://www.runoob.com/html/html-colors.html 上进行查询。
代码如下(示例):
from PIL import Image, ImageFont, ImageDraw
import os
def CreateImg(text, max_len):
fontSize = 30
liens = text.split('\n')
# 画布颜色
im = Image.new("RGB", ((fontSize * max_len), len(liens) * (fontSize + 5)), (255, 255, 255))
dr = ImageDraw.Draw(im)
# 字体样式
fontPath = os.path.join("C:\\Windows\\Fonts\\", "simhei.ttf")
font = ImageFont.truetype(fontPath, fontSize)
# 文字颜色
dr.text((0, 0), text, font=font, fill="#000000")
im.save('output.png')
im.show()
with open('word.txt', 'r', encoding='utf-8')as f:
text = f.read()
with open('word.txt', 'r', encoding='utf-8')as f:
text_temp = f.readlines()
max_len = 0
for i, s in enumerate(text_temp):
if len(s) > max_len:
max_len = len(s)
print(max_len)
CreateImg(text, max_len)
效果如下:
总体来说,图片能满足我的要求。
总结
这篇wiki总结本身没什么大的难度,只是记录下,为了方便后续遇到相同诉求的同学能快速实现。
另外,就是对那篇知乎帖子感触较深,做个记录。