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爬虫神器Beautiful Soup用法
Jan 20 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
神经网络理论基础及Python实现详解
Dec 15 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
关于Python作用域自学总结
Jun 10 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
使用python绘制二维图形示例
Nov 22 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
js代码实现轮播图
2020/05/04 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
python输出指定月份日历的方法
2015/04/23 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
详解Python 正则表达式模块
2018/11/05 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
python找出因数与质因数的方法
2019/07/25 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
初中家长寄语
2014/04/02 职场文书
力学专业求职信
2014/07/23 职场文书
民主评议党员总结
2014/10/20 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis