栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python3 + PIL 实现文字转图片与自动换行(支持中英文与 )

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python3 + PIL 实现文字转图片与自动换行(支持中英文与	
)

每行开始遇到标点符号会自动加入前一行

# coding=utf-8
import re
from PIL import Image, ImageDraw, ImageFont

LINE_CHAR_COUNT = 12*2  # 每行字符数:12个中文字符
TABLE_WIDTH = 4

def line_break(line):
    ret = ''
    width = 0
    for c in line:
        if len(c.encode('utf8')) == 3:  # 中文
            if LINE_CHAR_COUNT == width + 1:  # 剩余位置不够一个汉字
                width = 2
                ret += 'n' + c
            else: # 中文宽度加2,注意换行边界
                width += 2
                ret += c
        else:
            if c == 't':
                space_c = TABLE_WIDTH - width % TABLE_WIDTH  # 已有长度对TABLE_WIDTH取余
                ret += ' ' * space_c
                width += space_c
            elif c == 'n':
                width = 0
                ret += c
            else:
                width += 1
                ret += c
        if width >= LINE_CHAR_COUNT:
            ret += 'n'
            width = 0
    if ret.endswith('n'):
        return ret
    return ret + 'n'


output_str = "白内障人群发病年龄多见于、40岁以上,其中60-8,9岁人群中,白内障发病率高、达80%"  # 测试字符串
output_str = line_break(output_str)
split_lines = output_str.split('n')  # 计算行数
split_lines = [var for var in split_lines if var] # 去除空数组
arr = [',', '、', '。', ',','!',"?","?","!","-"]
print(split_lines)
for item in range(0,len(split_lines)):
    symbol = split_lines[item][0] # 获取符号
    print(symbol)
    if (symbol in arr):
        if len(split_lines) > item+1:
            split_lines[item] = split_lines[item] + split_lines[item + 1][0]
            split_lines[item + 1] = split_lines[item + 1][1:]
        split_lines[item] = split_lines[item][1:]
        split_lines[item - 1] = split_lines[item - 1] + symbol
print(split_lines)
split_lines = "n".join(split_lines)
d_font = ImageFont.truetype('SIMLI.TTF', 60)
image = Image.open("/Users/xywy/Desktop/WechatIMG5039.jpeg")
draw_table = ImageDraw.Draw(im=image)
draw_table.text(xy=(160, 150), text=split_lines, fill=(255,255,255), font= d_font, spacing=4)  # 文字位置,内容,字体
image.show()  # 直接显示图片
# image.save('comments.png', 'PNG')  # 保存在当前路径下,格式为PNG
image.close()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/840801.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号