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中的Classes和Metaclasses详解
Apr 02 Python
编写Python的web框架中的Model的教程
Apr 29 Python
python:socket传输大文件示例
Jan 18 Python
Python实现k-means算法
Feb 23 Python
解决DataFrame排序sort的问题
Jun 07 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python登录系统界面实现详解
Jun 25 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php生成html文件方法总结
2014/12/01 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
对于Python中线程问题的简单讲解
2015/04/03 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
班组长安全生产职责
2013/12/16 职场文书
知识竞赛主持词
2014/03/26 职场文书
销售岗位职责范本
2014/06/12 职场文书
博士生专家推荐信
2014/09/26 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
Go语言基础知识点介绍
2021/07/04 Golang
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS