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 10 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
python多维数组分位数的求取方式
Mar 03 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
django下创建多个app并设置urls方法
Aug 02 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 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 Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python数学形态学实例分析
2019/09/06 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
基于opencv实现简单画板功能
2020/08/02 Python
Python用SSH连接到网络设备
2021/02/18 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
会计自我鉴定
2014/02/04 职场文书
企业新年寄语
2014/04/04 职场文书
大专学生求职自荐信
2014/07/06 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
vue elementUI批量上传文件
2022/04/26 Vue.js