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.3教程之模拟百度登陆代码分享
Jan 16 Python
使用python实现strcmp函数功能示例
Mar 25 Python
初步讲解Python中的元组概念
May 21 Python
python 实时遍历日志文件
Apr 12 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
5款非常棒的Python工具
Jan 05 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python原类、类的创建过程与方法详解
Jul 19 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
python破解同事的压缩包密码
Oct 14 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
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
Python_LDA实现方法详解
2017/10/25 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
解决python3输入的坑——input()
2020/12/05 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
八年级生物教学反思
2014/01/22 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
积极向上的团队口号
2014/06/06 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS