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爬虫代理池服务
Feb 28 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
Pycharm+Python+PyQt5使用详解
Sep 25 Python
Python any()函数的使用方法
Oct 28 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python基于jieba, wordcloud库生成中文词云
May 13 Python
基于python实现删除指定文件类型
Jul 21 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
python图片合成的示例
Nov 09 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
javascript hashtable实现代码
2009/10/13 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
python处理RSTP视频流过程解析
2020/01/11 Python
django 读取图片到页面实例
2020/03/27 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
sort命令的作用和用法
2013/08/25 面试题
党支部公开承诺践诺书
2014/03/28 职场文书
工地安全质量标语
2014/06/07 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
遗嘱格式范本
2015/08/07 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL