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实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
python创建进程fork用法
Jun 04 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
python实现外卖信息管理系统
Jan 11 Python
在python 中实现运行多条shell命令
Jan 07 Python
python基础 range的用法解析
Aug 23 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
使用python绘制温度变化雷达图
Oct 18 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
python dir函数快速掌握用法技巧
Dec 09 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中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
js实现扫雷源代码
2020/11/27 Javascript
django中静态文件配置static的方法
2018/05/20 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
资料员的岗位职责
2013/11/20 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
青年教师培训方案
2014/02/06 职场文书
考核工作实施方案
2014/03/30 职场文书
推荐信模板
2014/05/09 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
MySQL kill不掉线程的原因
2021/05/07 MySQL
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
Nginx实现会话保持的两种方式
2022/03/18 Servers
Go语言 详解net的tcp服务
2022/04/14 Golang