代碼如下:
import os
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
# 生成空白檔案
def new_image(width, height, color, name):
img = Image.new('RGB', (width, height), (color["r"], color["g"], color["b"]))
# img.show()
img.save(name)
# 建立字型檔案
def creat_font_img(value, file_name, path):
# 編輯圖檔路徑
img = cv2.imread(path)
# 設定需要顯示的字型
fontpath = "font/simsun.ttc"
# 32為字型大小
font = ImageFont.truetype(fontpath, 32)
img_pil = Image.fromarray(img)
draw = ImageDraw.Draw(img_pil)
# 擷取字型寬度
sum_width = 0
sum_height = 0
for char in value:
width, height = draw.textsize(char, font)
sum_width += width
sum_height = height
# 繪制文字資訊
# (100,300/350)為字型的位置,(255,255,255)為白色,(0,0,0)為黑色
draw.text(((img.shape[1] - sum_width) / 2, (img.shape[0] - sum_height) / 2), value, font=font, fill=(0, 0, 0))
bk_img = np.array(img_pil)
# cv2.imshow("add_text", bk_img)
cv2.waitKey() # 儲存圖檔路徑
cv2.imwrite(file_name + "_font.png", bk_img)
def image_resize(img, size=(1500, 1100)):
"""調整圖檔大小
"""
try:
if img.mode not in ('L', 'RGB'):
img = img.convert('RGB')
img = img.resize(size)
except Exception as e:
pass
return img
# 合并圖檔(垂直)
def image_merge(images, output_dir='./', output_name='merge.jpg', \
restriction_max_width=None, restriction_max_height=None):
"""垂直合并多張圖檔
images - 要合并的圖檔路徑清單
ouput_dir - 輸出路徑
output_name - 輸出檔案名
restriction_max_width - 限制合并後的圖檔最大寬度,如果超過将等比縮小
restriction_max_height - 限制合并後的圖檔最大高度,如果超過将等比縮小
"""
max_width = 0
total_height = 0
# 計算合成後圖檔的寬度(以最寬的為準)和高度
for img_path in images:
if os.path.exists(img_path):
img = Image.open(img_path)
width, height = img.size
if width > max_width:
max_width = width
total_height += height
# 産生一張空白圖
new_img = Image.new('RGB', (max_width, total_height), 255)
# 合并
x = y = 0
for img_path in images:
if os.path.exists(img_path):
img = Image.open(img_path)
width, height = img.size
new_img.paste(img, (x, y))
y += height
if restriction_max_width and max_width >= restriction_max_width:
# 如果寬帶超過限制
# 等比例縮小
ratio = restriction_max_height / float(max_width)
max_width = restriction_max_width
total_height = int(total_height * ratio)
new_img = image_resize(new_img, size=(max_width, total_height))
if restriction_max_height and total_height >= restriction_max_height:
# 如果高度超過限制
# 等比例縮小
ratio = restriction_max_height / float(total_height)
max_width = int(max_width * ratio)
total_height = restriction_max_height
new_img = image_resize(new_img, size=(max_width, total_height))
if not os.path.exists(output_dir):
os.makedirs(output_dir)
save_path = '%s/%s' % (output_dir, output_name)
new_img.save(save_path)
return save_path
color = {}
color["r"] = 255
color["g"] = 255
color["b"] = 255
new_image(430, 100, color, "a.jpg")
creat_font_img("aaaaaaa", "a", "a.jpg")
creat_font_img("好好好", "b", "a.jpg")
creat_font_img("emmmmmmmm", "c", "a.jpg")
image_merge(images=['a_font.png', 'b_font.png', 'c_font.png'], output_name='mer.png')
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwIzM3MDMzgTM3ITOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
具體大家可以自行嘗試……