python实现图片插入文字


Posted in Python onNovember 26, 2019

本文实例为大家分享了python图片插入文字的具体代码,供大家参考,具体内容如下

问题

如何在图片中插入大量文字并且自动换行

效果

原始图

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操作列表之List.insert()方法的使用
May 20 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python制作简单五子棋游戏
Jun 18 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
Python之——生成动态路由轨迹图的实例
Nov 22 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 #Python
python向图片里添加文字
Nov 26 #Python
python 遍历pd.Series的index和value
Nov 26 #Python
Python爬取爱奇艺电影信息代码实例
Nov 26 #Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 #Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 #Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 #Python
You might like
php strcmp使用说明
2010/04/22 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
机械设计职业生涯规划书
2013/12/27 职场文书
教师求职自荐信
2014/03/09 职场文书
小学英语课后反思
2014/04/26 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
医德医魂心得体会
2014/09/11 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2015初中团委工作总结
2015/07/28 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
教你一步步实现一个简易promise
2021/11/02 Javascript
MySQL创建管理RANGE分区
2022/04/13 MySQL