用python制作“除夕夜倒计时”海报,新的一年你准备好了么?

简介: Pillow 提供ImageColor.getcolor()函数, 所以你不必记住想用的颜色的RGBA值。

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

image

000.效果预览

image

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)

image

灵感来源: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关于图像处理的模块,

加入了一些新的设计元素,
制作了新一版本的新年倒计时海报。

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

原文发布时间:2020-1-17
本文作者:GitPython
本文来自阿里云云栖号合作伙伴“清风Python”,了解相关信息可以关注“清风Python

相关文章
|
算法 异构计算 Python
用 python 制作高逼格的数学动画
用 python 制作高逼格的数学动画
|
7月前
|
Python
python tkinter 界面倒计时(用于监督页面返回)
python tkinter 界面倒计时(用于监督页面返回)
python tkinter 界面倒计时(用于监督页面返回)
|
自然语言处理 数据安全/隐私保护 Python
用Python做一个令人发疯的海报
用Python做一个令人发疯的海报
195 0
|
开发框架 API C++
ESP32 + HaaS Python UI Lite 组件 打造倒计时面板
ESP32 + HaaS Python UI Lite 组件 打造倒计时面板
187 0
|
Python
python写的倒计时表达-学习笔记9-嵌套循环
python写的倒计时表达-学习笔记9-嵌套循环
103 0
python写的倒计时表达-学习笔记9-嵌套循环
|
程序员 Python
使用Python制作内马尔的胜利之舞代码版
使用Python制作内马尔的胜利之舞代码版
177 0
|
Python
用Python制作七夕表白神器,让你成功概率提高99.9%
用Python制作七夕表白神器,让你成功概率提高99.9%
220 0
|
Python
python制作代码舞视频来啦~
python制作代码舞视频来啦~
192 0