用 Python 写个七夕表白神器
爱心树
首先,我们来画一棵长满爱心果实的树。
主要实现代码:
# 画爱心
def love(x, y):
lv = turtle.Turtle()
lv.hideturtle()
lv.up()
# 定位
lv.goto(x, y)
# 画圆弧
def curvemove():
for i in range(20):
lv.right(10)
lv.forward(2)
lv.color('red', 'pink')
lv.speed(10000000)
lv.pensize(1)
lv.down()
lv.begin_fill()
lv.left(140)
lv.forward(22)
curvemove()
lv.left(120)
curvemove()
lv.forward(22)
# 画完复位
lv.left(140)
lv.end_fill()
# 画树
def tree(branchLen, t):
# 剩余树枝太少要结束递归
if branchLen > 5:
# 如果树枝剩余长度较短则变绿
if branchLen < 20:
t.color("green")
t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
t.down()
t.forward(branchLen)
love(t.xcor(), t.ycor())
t.up()
t.backward(branchLen)
t.color("brown")
return
t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
t.down()
t.forward(branchLen)
# 以下递归
ang = random.uniform(15, 45)
t.right(ang)
# 随机决定减小长度
tree(branchLen - random.uniform(12, 16), t)
t.left(2 * ang)
# 随机决定减小长度
tree(branchLen - random.uniform(12, 16), t)
t.right(ang)
t.up()
t.backward(branchLen)
表白气球
我们接着看一下表白气球的实现,要实现的效果是:随机生成各种颜色向上漂浮的气球,点击气球会破。
主要实现代码如下:
# 气球
balloons = []
# 颜色
color_option = ["red", "blue", "green", "purple", "pink", "yellow", "orange"]
# 气球大小
size = 50
# 气球线
def line(x, y, a, b, line_width=1, color_name="black"):
up()
goto(x, y)
down()
color(color_name)
width(line_width)
goto(a, b)
def distance(x, y, a, b):
# 判断鼠标点击位置和气球坐标的距离
return ((a - x) ** 2 + (b - y) ** 2) ** 0.5
def tap(x, y):
for i in range(len(balloons)):
# 判断是否点击气球队列中的其中一个
if distance(x, y, balloons[i][0], balloons[i][1]) < (size / 2):
# 删除气球
balloons.pop(i)
return
def draw():
# 清除画布
clear()
for i in range(1, (len(balloons) + 1)):
line(balloons[-i][0], balloons[-i][1], balloons[-i][0], balloons[-i][1] - size * 1.5, 1)
up()
goto(balloons[-i][0], balloons[-i][1])
# 画原点,参数为大小和颜色
dot(size, balloons[-i][2])
# 改变纵坐标,模仿气球上升
balloons[-i][1] = balloons[-i][1] + 1
# 修改画布
update()
def gameLoop():
# 1/50 的概率生成一个气球
if randrange(0, 50) == 1:
# 气球坐标,在边框位置减去气球大小
x = randrange(-200 + size, 200 - size)
# 随机在颜色队列选择一个颜色
c = choice(color_option)
# 添加气球队列
balloons.append([x, -200 - size, c])
draw()
ontimer(gameLoop, 10)
表白卡
我们可以通过 Python 在原有照片上添加一些适合主题的诗词来制作表白卡。
原图:
效果图:
主要实现代码如下:
img = cv2.imread('test.png')
mask = np.zeros(img.shape[:2], np.uint8)
size = (1, 65)
bgd = np.zeros(size, np.float64)
fgd = np.zeros(size, np.float64)
rect = (1, 1, img.shape[1], img.shape[0])
cv2.grabCut(img, mask, rect, bgd, fgd, 10, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask == 2) | (mask == 0), 1, 255)
img = img.astype(np.int32)
img *= mask2[:, :, np.newaxis]
img[img>255] = 255
img =img.astype(np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img, 'RGB')
img.save('test1.jpg')
fp = open(r"word.txt", "r", encoding="utf-8")
text = fp.read()
mask_pic=np.array(Image.open(r"test1.jpg"))
wordcloud = WordCloud(font_path='hyr3gjm.ttf',mask=mask_pic,max_words=200).generate(text)
image=wordcloud.to_image()
image.save("wordcloud2.png")
cloud_data = np.array(image)
alpha = np.copy(cloud_data[:,:,0])
alpha[alpha>0] = 255
new_image = Image.fromarray(np.dstack((cloud_data, alpha)))
card = Image.open("test.png")
card = card.convert("RGBA")
card.paste(new_image, (0,0), mask=new_image)
card.save("card.png")
当然了,除了这些还可以画玫瑰花什么的,可以看一下:还在为 520 发愁吗?教你用 Python 写个表白神器!。
源码在公号后台回复 200825 获取。
本文分享自微信公众号 - Python小二(chengxuzhijian)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【Flutter 实战】动画序列、共享动画、路由动画
老孟导读:此篇文章是 Flutter 动画系列文章第四篇,本文介绍动画序列、共享动画、路由动画。 动画序列 Flutter中组合动画使用Interval,Interval继承自Curve,用法如下: Animation _sizeAnimation = Tween(begin: 100.0, end: 300.0).animate(CurvedAnimation( parent: _animationController, curve: Interval(0.5, 1.0))); 表示_sizeAnimation动画从0.5(一半)开始到结束,如果动画时长为6秒,_sizeAnimation则从第3秒开始。 Interval中begin 和end参数值的范围是0.0到1.0。 下面实现一个先执行颜色变化,在执行大小变化,代码如下: class AnimationDemo extends StatefulWidget { @override State<StatefulWidget> createState() => _AnimationDemo();}class _A...
- 下一篇
学会MySQL主从复制读写分离,看这篇就够了
思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言 在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。 为什么要采用主从复制读写分离的架构?如何实现?有什么缺点?让我们带着这些问题开始这段学习之旅吧! 为什么使用主从复制、读写分离 主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能。你想,假设是单机,读写都在一台MySQL上面完成,性能肯定不高。如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能不就能大大提高了吗? 所以主从复制、读写分离就是为了数据库能支持更大的并发。 随着业务量的扩展、如果是单机部署的MySQL,会导致I/O频率过高。采用主从复制、读写分离可以提高数据库的可用性。 主从复制的原理 ①当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。 ②salve从库连接master主库,Master有多少个slave就会创建多少个binlog dum...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 2048小游戏-低调大师作品