PIL:漸變文字

最近在工作中,需要使用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

代碼中還另外提供了一種文字漸變效果,原理都是相通的,大家可以根據需要自行設計漸變的顏色效果圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章