Python在图片中添加文字的两种方法


Posted in Python onApril 29, 2017

本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧

一、使用OpenCV

在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦。OpenCV中并没有使用自定义字体文件的函数,这不仅意味着我们不能使用自己的字体,而且意味着他无法显示中文字符。这还是非常要命的事情。而且他显示出来的文字位置也不太好控制。比如下面的代码,他想做的仅仅是显示数字3:

代码:

#coding=utf-8
import cv2
import numpy as np
from pylab import *
%matplotlib inline
font=cv2.FONT_HERSHEY_SIMPLEX#使用默认字体
im=np.zeros((50,50,3),np.uint8)#新建图像,注意一定要是uint8
img=cv2.putText(im,'3',(0,40),font,1.2,(255,255,255),2)#添加文字,1.2表示字体大小,(0,40)是初始的位置,(255,255,255)表示颜色,2表示粗细
imshow(img)

结果:

Python在图片中添加文字的两种方法

我么可以发现文字出现的位置并不怎么好把握,初始的坐标默认是指左下角的坐标,不怎么方便。而且显示出文字以后,我们不好掌握他实际占的位置和大小。

不过有一点方便的是,我们可以随意改变他的粗细,而不用更换字体。这一点是下面使用PIL进行绘图所不具备的优点。

二、使用PIL

同样为了生成数字3,下面是使用PIL进行的操作:

代码:

import Image,ImageFont,ImageDraw
import numpy as np
from pylab import *
%matplotlib inline
font = ImageFont.truetype('3.ttf',50) #使用自定义的字体,第二个参数表示字符大小
im = Image.new("RGB",(50,50))

#生成空白图像
draw = ImageDraw.Draw(im)



 #绘图句柄
x,y=(0,0)








#初始左上角的坐标
draw.text((x,y), '3', font=font)

#绘图
offsetx,offsety=font.getoffset('3')
#获得文字的offset位置
width,height=font.getsize('3')

 #获得文件的大小
im=np.array(im)
cv2.rectangle(im,(offsetx+x,offsety+y),(offsetx+x+width,offsety+y+height),(255,255,255),1)#绘出矩形框
imshow(im)

结果:

Python在图片中添加文字的两种方法

我们可以发现,PIL支持使用自定义的字体文件,而且能够提供字体所占位置的详细信息,我们可以精确的确定文字所占的位置,在应用中特别有用。唯一的不足就是他不能改变字体的粗细(毕竟这用的是字体模板)。

实际应用中看来还要在这两种方法中择优使用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python简单的制作图片验证码实例
May 31 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
python模块导入的方法
Oct 24 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
基于python检查矩阵计算结果
May 21 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
基于PyTorch中view的用法说明
Mar 03 Python
详解Python生成器和基于生成器的协程
Jun 03 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 #Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
Python变量和字符串详解
Apr 29 #Python
python实现unicode转中文及转换默认编码的方法
Apr 29 #Python
Python 正则表达式实现计算器功能
Apr 29 #Python
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
js倒计时显示实例
2016/12/11 Javascript
react-native 封装选择弹出框示例(试用ios&android)
2017/07/11 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
python Django框架实现自定义表单提交
2016/03/25 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
python重试装饰器的简单实现方法
2019/01/31 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python 装饰器的使用示例
2020/10/10 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
留学推荐信写作指南
2014/01/25 职场文书
生产部岗位职责范文
2014/02/07 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
超市督导岗位职责
2015/04/10 职场文书
建房合同协议书
2016/03/21 职场文书