圖片內怎麼新增文字內容(如何在圖片上編輯文字)

前言

給圖片新增文字資訊是非常常見的需求,通常需要新增的文字資訊分為中文文字或者是非中文的文字,比如數字和英文,對這兩類的實現方法也有所不同,非中文的文字資訊可以直接用 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