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 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
Django URL参数Template反向解析
Nov 24 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
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
Json解析的方法小结
2016/06/22 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python实现12306火车票查询器
2017/04/20 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
Python的collections模块真的很好用
2021/03/01 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
教师师德教育的自我评价
2013/10/31 职场文书
交通安全标语
2014/06/06 职场文书
党校学习党性分析材料
2014/12/19 职场文书
护士自我推荐信范文
2015/03/24 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
全网非常详细的pytest配置文件
2022/07/15 Python