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实现的金山快盘的签到程序
Jan 17 Python
Python+Django搭建自己的blog网站
Mar 13 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
python3个性签名设计实现代码
Jun 19 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Tensorflow 多线程设置方式
Feb 06 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
Django解决frame拒绝问题的方法
Dec 18 Python
python wsgiref源码解析
Feb 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
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
javascript实现的listview效果
2007/04/28 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python 实现插入排序算法
2012/06/05 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python中logging实例讲解
2019/01/17 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
应届生.NET方向面试题
2015/05/23 面试题
中学教师岗位职责
2013/11/26 职场文书
大学生秋游活动方案
2014/02/17 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
美食节目策划方案
2014/05/31 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
民间借贷被告代理词
2015/05/23 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
Python基础之条件语句详解
2021/06/16 Python