Python在图片中插入大量文字并且自动换行


Posted in Python onJanuary 02, 2019

问题

如何在图片中插入大量文字并且自动换行

效果

原始图

Python在图片中插入大量文字并且自动换行

效果图

Python在图片中插入大量文字并且自动换行

注明

若需要写入中文请使用中文字体

实现方式

from PIL import Image, ImageDraw, ImageFont
class ImgText:
  font = ImageFont.truetype("micross.ttf", 24)
  def __init__(self, text):
    # 预设宽度 可以修改成你需要的图片宽度
    self.width = 100
    # 文本
    self.text = text
    # 段落 , 行数, 行高
    self.duanluo, self.note_height, self.line_height = self.split_text()
  def get_duanluo(self, text):
    txt = Image.new('RGBA', (100, 100), (255, 255, 255, 0))
    draw = ImageDraw.Draw(txt)
    # 所有文字的段落
    duanluo = ""
    # 宽度总和
    sum_width = 0
    # 几行
    line_count = 1
    # 行高
    line_height = 0
    for char in text:
      width, height = draw.textsize(char, ImgText.font)
      sum_width += width
      if sum_width > self.width: # 超过预设宽度就修改段落 以及当前行数
        line_count += 1
        sum_width = 0
        duanluo += '\n'
      duanluo += char
      line_height = max(height, line_height)
    if not duanluo.endswith('\n'):
      duanluo += '\n'
    return duanluo, line_height, line_count
  def split_text(self):
    # 按规定宽度分组
    max_line_height, total_lines = 0, 0
    allText = []
    for text in self.text.split('\n'):
      duanluo, line_height, line_count = self.get_duanluo(text)
      max_line_height = max(line_height, max_line_height)
      total_lines += line_count
      allText.append((duanluo, line_count))
    line_height = max_line_height
    total_height = total_lines * line_height
    return allText, total_height, line_height
  def draw_text(self):
    """
    绘图以及文字
    :return:
    """
    note_img = Image.open("001.png").convert("RGBA")
    draw = ImageDraw.Draw(note_img)
    # 左上角开始
    x, y = 0, 0
    for duanluo, line_count in self.duanluo:
      draw.text((x, y), duanluo, fill=(255, 0, 0), font=ImgText.font)
      y += self.line_height * line_count
    note_img.save("result.png")
if __name__ == '__main__':
  n = ImgText(
    "1234567890" * 5)
  n.draw_text()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
跟老齐学Python之复习if语句
Oct 02 Python
python常规方法实现数组的全排列
Mar 17 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python如何创建TCP服务端和客户端
Aug 26 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
Aug 06 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
Python过滤序列元素的方法
Jul 31 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
python 输出所有大小写字母的方法
Jan 02 #Python
Python高斯消除矩阵
Jan 02 #Python
python遍历小写英文字母的方法
Jan 02 #Python
Python最小二乘法矩阵
Jan 02 #Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 #Python
Python 一句话生成字母表的方法
Jan 02 #Python
使用python将请求的requests headers参数格式化方法
Jan 02 #Python
You might like
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
javascript中length属性的探索
2011/07/31 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
Vue2单一事件管理组件通信
2017/05/09 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
详解python中的线程
2018/02/10 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
ubuntu上安装python的实例方法
2019/09/30 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
广告学专业毕业生自荐信
2013/09/24 职场文书
护士的岗位职责
2013/12/04 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL