最近在工作中,需要使用python的PIL庫來做一些圖片處理,碰到一個需求是要在背景圖片上生成帶有漸變效果的文字,這裏講代碼分析給大家,給大家提供一個參考。
需求圖:
代碼:
from PIL import ImageFont, ImageDraw, Image
if __name__ == "__main__":
# 圖片上的文字
word = "Hello World"
# 圖片上文字的座標
word_position = (60, 430)
# 文字字體和字號
font = ImageFont.truetype("font/PingFang.ttc", 160)
# 文字區域的box座標
word_box = font.getbbox(word)
# 漸變顏色效果圖片
font_gradient_file_path = "template/font_gradient_1.jpg"
# 生成文字區域的alpha圖片
font_gradient_im = Image.open(font_gradient_file_path)
font_gradient_im = font_gradient_im.resize((word_box[2]-word_box[0], word_box[3]-word_box[1]))
font_alpha = Image.new('L', font_gradient_im.size)
font_alpha_d = ImageDraw.Draw(font_alpha)
font_alpha_d.text((0,0), word , fill='White', anchor="lt", font=font)
font_gradient_im.putalpha(font_alpha)
# 將帶有漸變效果的文字圖片覆蓋到背景圖片上
background_file_path = "template/background_template.png"
im = Image.open(background_file_path)
im.paste(font_gradient_im, word_position, font_gradient_im)
# 保存圖片
im.save("result.png")
重點說明: word_box = font.getbbox(word)
在設置了文字的字體和字號後,可以通過這個方法得到具體文字區域的大小。
有了文字區域的大小後,我們就可以通過font_gradient_im = font_gradient_im.resize((word_box[2]-word_box[0], word_box[3]-word_box[1]))
動態的修改漸變顏色效果圖片,以適配不同文字。
font_gradient_im.putalpha(font_alpha)
通過在漸變顏色效果圖片上增加一個文字的alpha通道,來實現文字的漸變。
im.paste(font_gradient_im, word_position, font_gradient_im)
將漸變效果的文字覆蓋到背景圖片上,生成我們想要的圖片。
需要以上代碼的同學,可以在這裏找到:
https://gitee.com/x_5/pil_example_gradient_font
代碼中還另外提供了一種文字漸變效果,原理都是相通的,大家可以根據需要自行設計漸變的顏色效果圖。