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装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
python使用tkinter实现简单计算器
Jan 30 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
python sys.argv[]用法实例详解
May 25 Python
基于python生成器封装的协程类
Mar 20 Python
python实现AES加密解密
Mar 28 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
Python threading.local代码实例及原理解析
Mar 16 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
Python 如何解决稀疏矩阵运算
May 26 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
php mysql索引问题
2008/06/07 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
Python对象体系深入分析
2014/10/28 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python有几个版本
2020/06/17 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
opencv实现图像几何变换
2021/03/24 Python
优秀毕业生自荐信范文
2014/01/01 职场文书
作风建设年活动总结
2014/08/27 职场文书
公司离职证明样本
2014/09/13 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
课题研究阶段性总结
2015/08/13 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
90行Python代码开发个人云盘应用
2021/04/20 Python
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang