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使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
Python多层装饰器用法实例分析
Feb 09 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Python logging模块写入中文出现乱码
May 21 Python
Python 发送邮件方法总结
Aug 10 Python
简单的命令查看安装的python版本号
Aug 28 Python
python区块链实现简版工作量证明
May 25 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
简单实现php上传文件功能
2017/09/21 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python注释详解
2016/06/01 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python能否java成为主流语言吗
2020/06/22 Python
Python可以用来做什么
2020/11/23 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
消防战士优秀事迹材料
2014/02/13 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
乌镇导游词
2015/02/02 职场文书
英文邀请函
2015/02/02 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js