用python製作「除夕夜倒計時」海報,新的一年你準備好了麼?

阿里雲 發佈 2020-01-23T12:33:43+00:00

im.save006.我是總結參考了大佬的部分代碼,利用pillow關於圖像處理的模塊,加入了一些新的設計元素,製作了新一版本的新年倒計時海報。



000.效果預覽


001.創建圖像

RGBA 值是一組數字,

紅、綠、藍和alpha(透明度)

代表0(根本沒有)到255(最高)的整數

在 Pillow 中,RGBA 值表示為四個整數值的元組。

例如,紅色表示為(255,0,0,255)

這種顏色中紅的值為最大,沒有綠和藍,並且alpha 值最大,這意味著它完全不透明。

綠色:(0,255,0,255)

藍色:(0,0,255,255)

白色是各種顏色的組合:(255,255,255,255)

而黑色沒有任何顏色:(0,0,0,255)

靈感來源:2019新年倒計時動態海報系列

Pillow 提供ImageColor.getcolor()函數,所以你不必記住想用的顏色的RGBA值。

該函數接受顏色名稱字符串作為第一個參數,字符串'RGBA'作為第二個參數,返回一個RGBA 元組。

from PIL import ImageColor
ImageColor.getcolor('red', 'RGBA')

運行結果:(255, 0, 0, 255)

本例中的圖像尺寸和顏色:尺寸:1000*2160

顏色:(174,60,58,255)

相關代碼如下:

from PIL import Image, ImageDraw, ImageFont
import os

# 創建圖像,並設置尺寸和顏色
im = Image.new('RGBA', (1000, 2160), (174,60,58,255))
draw = ImageDraw.Draw(im)


002.設置字體

要設置字體和大小,

我們首先將文件夾名稱保存在fontsFolde中。

然後調用ImageFont.truetype(),

傳入我們想要的字體的.TTF 文件,

之後是表示字體大小的整數。

將ImageFont.truetype()返回的Font對象

保存在arialFont這樣的變量中,

然後將該變量傳入text(),

作為最後的關鍵字參數。


# 使用使用的字體及字號
fontsFolder = 'D:/05.python_code/00.py_projects/new_year_last'
font1 = ImageFont.truetype(os.path.join(fontsFolder, 'wenzangshufang.ttf'), 580)
font2 = ImageFont.truetype(os.path.join(fontsFolder, 'SourceHanSerifCN-SemiBold.otf'), 90)
font3 = ImageFont.truetype(os.path.join(fontsFolder, 'SourceHanSerifCN-SemiBold.otf'), 180)


003.繪製矩形

rectangle(xy, fill, outline) 方法繪製一個矩形

xy 參數是一個矩形元組,

形式為(left,top, right, bottom)。

left 和top 值指定了矩形左上角的x 和y 坐標,

right 和bottom 指定了矩形的右下角。

可選的fill 參數是顏色,將填充該矩形的內部。

可選的outline 參數是矩形輪廓的顏色。

# 繪製矩形
left = pos_x_3
top = 1750
right = pos_x_3 + txtSize_3[0]
bottom = 1700 + txtSize_3[1]
draw.rectangle((left, top, right, bottom), fill=(217, 217, 217, 255))


004.繪製文本

ImageDraw 對象還有text()方法,用於在圖像上繪製文本。

text()方法有4 個參數:

xy參數是兩個整數的元組,指定文本區域的左上角

text 參數是想寫入的文本字符串

可選參數fill 是文本的顏色

可選參數font 是一個ImageFont 對象,

用於設置文本的字體和大小

因為通常很難預先知道一塊文本在給定的字體下的大小,所以ImageDraw 模塊也提供了textsize()方法。

textsize()方法返回一個兩整數元組,表示如果以指定的字體寫入圖像,文本的寬度和高度。

# 計算各文本的放置位置
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

wenhou = ["除夕夜", "貼春聯", "把面發", "置新衣", "煮肉肉", "買年貨", "大掃除", "祭灶台"]
txtSize_3 = draw.textsize(wenhou[i-1], font3)
pos_x_3 = (1000 - txtSize_3[0]) / 2

# 設置文本放置位置,居中
draw.text((pos_x_1, 200), '距 離 新 年 還 有', fill=(217, 217, 217, 255), font=font2)
draw.text((pos_x_2, 1400), '天', fill=(217, 217, 217, 255), font=font2)
draw.text((pos_x_3, 1700), wenhou[i-1], fill=im_color[i-1], font=font3)

# 設置變化的文本屬性
txtSize_4 = draw.textsize(str(i), font1)
pos_x_4 = (1000 - txtSize_4[0]) / 2
draw.text((pos_x_4, 600), str(i), fill=(255, 192, 0, 255), font=font1)


005.保存圖像到本地

保存圖像到當前目錄中命名為:dayx.png

# 保存圖像
filename = 'day' + str(i) + '.png'
im.save(filename)


006.我是總結

參考了大佬的部分代碼,利用pillow關於圖像處理的模塊,

加入了一些新的設計元素,製作了新一版本的新年倒計時海報。

關鍵字: