python实现图片插入文字
作者:staHuri 发布时间:2021-11-02 20:32:09
标签: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()
来源:https://blog.csdn.net/staHuri/article/details/83822364


猜你喜欢
- 本文实例为大家分享了python实现双链表的具体代码,供大家参考,具体内容如下实现双链表需要注意的地方1、如何插入元素,考虑特殊情况:头节点
- 我开发了一个程序,数据在服务器端处理,通过ODBC和Access通讯。在实际应用中,调用后台存储过程不方便,花费时间也长。有什么好办法可以在
- 1.遍历列表需要对列表中的每个元素都执行相同的操作时,可使用for 循环:magicians = ['alice','
- 在进入一个页面的时候,一般在获取数据的同时,会先显示一个 loading ,等请求结束再隐藏 loading 渲染页面,只需要用一个属性去记
- 在这里输入命令:操作命令:1.更新Anaconda:conda update conda更新所有包conda update --all3.添
- 本文实例讲述了Python3访问并下载网页内容的方法。分享给大家供大家参考。具体如下:#!/usr/local/bin/python3.2i
- 函数绑定(Function binding)很有可能是你在开始使用JavaScript时最少关注的一点,但是当你意识到你需要一个解决方案来解
- 一、matplotlib 库一个用来绘图的库import matplotlib.pyplot as plt1)plt.imread(&
- 由于sqlserver的设计特殊性,一般大量数据一般都是采用水平分表,而垂直分表只是把text、图片都较大数据放到单独的表中,这样数据设计会
- Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都需要
- 1. 效果图自己画一张图,原图 VS 骨架效果图如下:opencv logo原图 VS 骨架化效果图如下:2. 源码# 图像骨架化~impo
- 下面是列表合并的4种方法,其中的代码都在Python3下测试通过,在Python2下运行应该也没问题,时间关系就没测试,遇到问题可以联系小编
- 写在前面因为暂时还没有想好做什么具体的某个项目来提升对python的理解,所以就自己想着做一下小玩意来加强一下自己对一些库和方法的理解分析1
- request获取post请求中的json数据def hello(request): data = json.loads(request.b
- 目的: 找出路径坐在的所有python文件(.py结尾),返回列表。代码:def list_py(path = None): if path
- cache 是一个带索引带超时的缓存库目的在于优化代码结构,提供了若干实践。 https://github.com/weapons
- 本文实例讲述了python实现希尔排序算法的方法。分享给大家供大家参考。具体如下:def shellSort(items): i
- 概述binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binl
- 对于手机、相机等设备拍摄的照片,由于手持方向的不同,拍出来的照片可能是旋转0°、90°、180°和270°。即使在电脑上利用软件将其转正,他
- 目录Python协程及asyncio基础知识定义协程函数及执行方法的演变创建协程任务的演变获取协程任务执行结果通过asyncio.gathe