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字符串详细介绍
May 09 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
Python反转序列的方法实例分析
Mar 21 Python
python实现石头剪刀布程序
Jan 20 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
Anaconda使用IDLE的实现示例
Sep 23 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 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之readdir函数用法实例
2014/11/13 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
php报错502badgateway解决方法
2019/10/11 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
javascript一点特殊用法
2008/05/28 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
解决jquery插件冲突的问题
2014/01/23 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
动态密码技术
2012/10/18 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
电大本科自我鉴定
2014/02/05 职场文书
学校个人对照检查材料
2014/08/26 职场文书
教师节标语大全
2014/10/07 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
小学毕业感言100字
2015/07/30 职场文书
小学入学感言
2015/08/01 职场文书
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL