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 相关文章推荐
OpenCV实现人脸识别
Apr 07 Python
python处理数据,存进hive表的方法
Jul 04 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
用python实现刷点击率的示例代码
Feb 21 Python
Django重置migrations文件的方法步骤
May 01 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
python Selenium 库的使用技巧
Oct 16 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
初识PHP
2014/09/28 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
js数组的操作详解
2013/03/27 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Python调用微信公众平台接口操作示例
2017/07/08 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
运行Python编写的程序方法实例
2020/10/21 Python
python中round函数保留两位小数的方法
2020/12/04 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
C#面试题问题集
2016/04/02 面试题
公益广告语集锦
2014/03/13 职场文书
团队口号大全
2014/06/06 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
2014年网管工作总结
2014/12/11 职场文书
检讨书范文
2019/04/16 职场文书