新的一年又來了,用python制作個(gè)“除夕夜倒計(jì)時(shí)”海報(bào)
大家好,歡迎來到 Crossin的編程教室 ! 你一定在社交媒體和朋友圈里見過不少活動(dòng)或產(chǎn)品發(fā)布前的倒計(jì)時(shí)海報(bào)。 新年伊始,馬上就快要春節(jié)了。今天我們就用python來做一組新年倒計(jì)時(shí)海報(bào)。 本文想法源自《用Python自動(dòng)化生成倒計(jì)時(shí)圖片》(來源:法納斯特 | 作者:小F),并結(jié)合《python繁瑣工作自動(dòng)化》一書,增添了一些設(shè)計(jì)元素。
000. 效果預(yù)覽


001. 創(chuàng)建圖像 RGBA 值是一組數(shù)字,
紅、綠、藍(lán)和alpha(透明度)
代表0(根本沒有)到255(最高)的整數(shù)
在 Pillow 中, RGBA 值表示為四個(gè)整數(shù)值的元組。 例如,紅色表示為(255,0,0,255) 這種顏色中紅的值為最大,沒有綠和藍(lán), 并且alpha 值最大,這意味著它完全不透明。 綠色:(0,255,0,255)
藍(lán)色:(0,0,255,255)
白色是各種顏色的組合:(255,255,255,255)
而黑色沒有任何顏色:(0,0,0,255)
靈感來源:2019新年倒計(jì)時(shí)動(dòng)態(tài)海報(bào)系列 Pillow 提供ImageColor.getcolor()函數(shù), 所以你不必記住想用的顏色的RGBA值。 該函數(shù)接受顏色名稱字符串作為第一個(gè)參數(shù), 字符串'RGBA'作為第二個(gè)參數(shù), 返回一個(gè)RGBA 元組。
from?PIL?import?ImageColor
ImageColor.getcolor('red',?'RGBA')
運(yùn)行結(jié)果:
(255,?0,?0,?255)本例中的圖像尺寸和顏色: 尺寸:1000*2160
顏色:(174,60,58,255)
相關(guān)代碼如下:
from?PIL?import?Image,?ImageDraw,?ImageFont
import?os
#?創(chuàng)建圖像,并設(shè)置尺寸和顏色
im?=?Image.new('RGBA',?(1000,?2160),?(174,60,58,255))
draw?=?ImageDraw.Draw(im)
002. 設(shè)置字體
要設(shè)置字體和大小,
我們首先將文件夾名稱保存在fontsFolde中。
然后調(diào)用ImageFont.truetype(),
傳入我們想要的字體的.TTF 文件,
之后是表示字體大小的整數(shù)。
將ImageFont.truetype()返回的Font對(duì)象
保存在arialFont這樣的變量中,
然后將該變量傳入text(),
作為最后的關(guān)鍵字參數(shù)。
#?使用使用的字體及字號(hào)
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) 方法 繪制一個(gè)矩形 xy 參數(shù)是一個(gè)矩形元組,
形式為(left,top, right, bottom)。
left 和top 值指定了矩形左上角的x 和y 坐標(biāo),
right 和bottom 指定了矩形的右下角。
可選的fill 參數(shù)是顏色,將填充該矩形的內(nèi)部。
可選的outline 參數(shù)是矩形輪廓的顏色。
#?繪制矩形
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 對(duì)象還有text()方法, 用于在圖像上繪制文本。 text()方法有4 個(gè)參數(shù): xy參數(shù)是兩個(gè)整數(shù)的元組,指定文本區(qū)域的左上角
text 參數(shù)是想寫入的文本字符串
可選參數(shù)fill 是文本的顏色
可選參數(shù)font 是一個(gè)ImageFont 對(duì)象,
用于設(shè)置文本的字體和大小
因?yàn)橥ǔ:茈y預(yù)先知道一塊文本 在給定的字體下的大小, 所以ImageDraw 模塊也提供了textsize()方法。 textsize()方法返回一個(gè)兩整數(shù)元組, 表示如果以指定的字體寫入圖像, 文本的寬度和高度。
#?計(jì)算各文本的放置位置
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?=?["除夕夜",?"貼春聯(lián)",?"把面發(fā)",?"置新衣",?"煮肉肉",?"買年貨",?"大掃除",?"祭灶臺(tái)"]
txtSize_3?=?draw.textsize(wenhou[i-1],?font3)
pos_x_3?=?(1000?-?txtSize_3[0])?/?2
#?設(shè)置文本放置位置,居中
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)
#?設(shè)置變化的文本屬性
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. 保存圖像到本地
保存圖像到當(dāng)前目錄中 命名為:dayx.png
#?保存圖像
filename?=?'day'?+?str(i)?+?'.png'
im.save(filename)
006. 我是總結(jié)
參考了大佬的部分代碼, 利用pillow關(guān)于圖像處理的模塊, 加入了一些新的設(shè)計(jì)元素, 制作了新一版本的新年倒計(jì)時(shí)海報(bào)。 獲取本文相關(guān)代碼,請(qǐng)?jiān)诠娞?hào)對(duì)話頁回復(fù) 新年快樂 ?新的一年,你有哪些愿望? 歡迎留言分享。 作者:GitPython 來源:GitPython _往期文章推薦_
新年了,用Python定制一本個(gè)性化日歷
評(píng)論
圖片
表情

