图片内怎么添加文字内容(如何在图片上编辑文字)
前言
给图片添加文本信息是非常常见的需求,通常需要添加的文本信息分为中文文字或者是非中文的文字,比如数字和英文,对这两类的实现方法也有所不同,非中文的文本信息可以直接用 opencv 实现,而中文文本需要使用 PIL ,因为 opencv 不支持中文。
所以接下来就分别介绍这两种实现方法。
opencv 添加文本信息
opencv 添加文本信息的函数是 putText ,实现代码如下所示,这个函数的参数主要是:
- img:原图
- text:需要添加的文字
- position:文字起始的位置,tuple 元组类型
- font: 字体类型,这里用了默认字体,实际上还有其他几种字体,具体可以查看官方文档:https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness, int lineType, bool bottomLeftOrigin
- font_scale: 字体大小
- font_color:字体的颜色
- thickness: 线的粗细
import cv2 %matplotlib inline import matplotlib.pyplot as plt # opencv img = cv2.imread('plane.jpg') # 添加的文字 text = 'plane' # 文字起始的位置 position = (600, 100) # 字体大小 font_scale = 3 # 字体颜色 font_color = (0, 0, 255) # 默认字体 font=cv2.FONT_HERSHEY_SIMPLEX # 线的粗细 thickness = 3 cv2.putText(img, text, position, font, font_scale, font_color, thickness, cv2.LINE_AA) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
结果如下所示:
PIL 添加中文文本信息
如果是中文文字,那么就必须用 PIL 来实现了,同样先上实现的代码:
from PIL import Image, ImageDraw, ImageFont %matplotlib inline import matplotlib.pyplot as plt # PIL 绘制中文 img = Image.open('plane.jpg') # 自定义字体 font = ImageFont.truetype("/System/Library/Fonts/PingFang.ttc", 60) draw = ImageDraw.Draw(img) # 文字起始坐标 position = (600, 100) # 文字 text = '纸飞机' # 文字颜色 color = (0, 0, 255) draw.text(position, text, font=font, fill=color) plt.imshow(img)
结果如下所示:
基本的参数其实和 opencv 的函数一样,同样需要指定文字、字体、起始位置、字体大小和颜色,其中字体可以是自定义的字体,在官方文档中给出了不同系统自带字体存放的位置:
- windows:在 c:\Windows\Fonts\
- mac:/Library/Fonts/, /System/Library/Fonts/ 或者是 ~/Library/Fonts/
- linux: 在 /usr/share/fonts/
https://pillow.readthedocs.io/en/stable/reference/ImageFont.html#PIL.ImageFont.truetype
赞 (0)