用Python自動化生成倒計時圖片
根據書中的「操作影象」章節內容,實現一個簡單又實用的小操作。
使用的模組為Pillow,一個處理影象檔案的Pyhton模組。
比如裁剪影象、調整影象大小、編輯影象的內容等。
可以實現自動編輯成千上萬的影象。
學習Python中有不明白推薦加入交流群
號:960410445
群裡有志同道合的小夥伴,互幫互助,
群裡有不錯的視訊學習教程和PDF!
比如說一些圖片網站,你看圖時它是沒有水印的。
但是當你下載下來的時候,圖片便會加上萬惡的水印。
這其中恐怕和自動編輯脫離不了關係,畢竟不能人工去加水印吧...
本次利用Pillow庫,實現自動化生成倒計時圖片。
/ 01 / 科普
在進行程式碼操作前,簡單對相關知識做個簡單的學習。
計算機程式通常將影象中的顏色表示為RGBA值。
RGBA值是一組數字,指定顏色中的紅、綠、藍和alpha(透明度)的值。
這些值是從0(根本沒有)到255(最高)的整數。
這些RGBA值分配給單個畫素,畫素是計算機螢幕上能顯示一種顏色的最小點。
畫素的RGB設定準確地告訴你應該顯示哪種顏色的色彩。
在Pillow中,RGBA值表示為四個整數值的元組。
比如紅色表示為(255, 0, 0, 255),其中alpha值最大,意味著完全不透明。
影象畫素用x和y座標指定,分別指定畫素在影象中的水平和垂直位置。
原點是位於影象左上角的畫素,為(0, 0)
這裡的示例圖使用的是驗證碼文章裡的一張圖。
image
/ 02 / 生成圖片
圖片的生成其實挺簡單的,無非就是一個背景圖、一個線框還有幾個文字。
詳細程式碼如下。
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">
from PIL import Image, ImageDraw, ImageFont
import os
for i in range(1, 22):
# 建立影象,設定影象大小及顏色
im = Image.new('RGBA', (1000, 1800), (166, 12, 4, 255))
draw = ImageDraw.Draw(im)
# 設定本次使用的字型
fontsFolder = 'C:\Windows\Fonts'
font1 = ImageFont.truetype(os.path.join(fontsFolder, '華康儷金黑W8.TTF'), 420)
font2 = ImageFont.truetype(os.path.join(fontsFolder, '方正蘭亭刊黑.TTF'), 40)
# 計算各文字的放置位置
txtSize_1 = draw.textsize('距 離 除 夕 夜', font2)
pos_x_1 = (1000 - txtSize_1[0]) / 2
txtSize_2 = draw.textsize('還 有', font2)
pos_x_2 = (1000 - txtSize_2[0]) / 2
txtSize_3 = draw.textsize('天', font2)
pos_x_3 = (1000 - txtSize_3[0]) / 2
txtSize_4 = draw.textsize('不 是 年 味 越 來 越 少', font2)
pos_x_4 = (1000 - txtSize_4[0]) / 2
txtSize_5 = draw.textsize('而 是 我 們 都 長 大 了', font2)
pos_x_5 = (1000 - txtSize_5[0]) / 2
# 設定文字放置位置,居中
draw.text((pos_x_1, 200), '距 離 除 夕 夜', fill=(217, 217, 217, 255), font=font2)
draw.text((pos_x_2, 300), '還 有', fill=(217, 217, 217, 255), font=font2)
draw.text((pos_x_3, 1050), '天', fill=(217, 217, 217, 255), font=font2)
draw.text((pos_x_4, 1350), '不 是 年 味 越 來 越 少', fill=(137, 183, 109, 255), font=font2)
draw.text((pos_x_5, 1440), '而 是 我 們 都 長 大 了', fill=(137, 183, 109, 255), font=font2)
# 繪製線框
draw.line([(20, 20), (980, 20), (980, 1780), (20, 1780), (20, 20)], fill=(217, 217, 217, 255), width=5)
# 設定變化的文字屬性
txtSize_6 = draw.textsize(str(i), font1)
pos_x_6 = (1000 - txtSize_6[0]) / 2
draw.text((pos_x_6, 500), str(i), fill=(137, 183, 109, 255), font=font1)
# im.show()
# 儲存影象
filename = 'day' + str(i) + '.png'
im.save(filename)
</pre>
相關字型檔案已上傳網盤,公眾號回覆「字型」即可獲取。
這裡我不禁想起,阿里的鹿班設計。
通過人工智慧技術,快速、批量、自動化的進行圖片設計。
一個據說能讓設計者失業的AI設計師。
這裡又不得不膜拜一波了。
看了我的這點小九九,我...
/ 03 / 總結
本次的成果如下。
image