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 相关文章推荐
Python3如何解决字符编码问题详解
Apr 23 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
python使用tornado实现登录和登出
Jul 28 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
10款最好的Python开发编辑器
Jul 03 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
详解python中的index函数用法
Aug 06 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
Python私有属性私有方法应用实例解析
Sep 15 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
图书管理程序(一)
2006/10/09 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Javascript this指针
2009/07/30 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Python编写Windows Service服务程序
2018/01/04 Python
python实现Adapter模式实例代码
2018/02/09 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Python 日期与时间转换的方法
2020/08/01 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
记帐员岗位责任制
2014/02/08 职场文书
货车司机岗位职责
2014/03/18 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android