【python】昔去雪如花,今来花似雪,今日份雪花快递到啦
创始人
2024-03-24 14:02:43
0

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~

大雪已至,冬天无恙,愿这个冬天的你,不缺暖阳,好日常在

小时候,冬天最盼望的就是下雪了~雪一下

在地上铺上一层雪白的毛毯的时候甚是好看~

还能堆堆雪人、打打雪仗,快乐的玩上一遭

现在,好冷啊,被子封印了我

怎么不出去也能看看雪花,欣赏它那高颜值呢~

让我们打开我们的奇思妙想,用python实现一下吧!

一、小试身手

导入模块

from turtle import *  # 从turtle中导出所有模块
import turtle

绘制蓝色图形模块

turtle.speed(7)  # 绘图速度,可不加
# 绘制蓝色图形模块
color("black", "pink")  # 黑色画线,绿色填充颜色
begin_fill()  # 开始填充fd(100)  # 向前100像素
right(60)  # 右转60度for i in range(3):fd(100)left(120)fd(100)left(60)fd(100)right(120)fd(100)left(60)right(120)
fd(100)
right(180)  # 将画笔指向最初的方向
end_fill()  # 填充完毕

绘制青色图形模块

# 绘制青色图形模块
begin_fill()
color("black", "green")
begin_fill()  # 开始填充
for i in range(3):fd(100)left(60)fd(100)right(120)fd(100)left(60)fd(100)left(120)end_fill()  # 填充完毕
done()  # 结束,停留

咳咳~这只是小试身手,下面我们继续

二、花样雪花

import turtle
import time
from turtle import *
# coding=utf-8def snowflake(l, d):screen = turtle.Screen()# screen.bgpic("my_q.jpg")screen.bgcolor("white")# 背景颜色可调turtle.tracer(0, 0)if d > 0:for i in range(6):speed("fastest")color("#97CBFF")  # silverwidth(5)forward(l)snowflake(l // 3, d - 1)backward(l)left(60)if __name__ == "__main__":snowflake(180, 5)#形状参数可调time.sleep(100)  #
import turtle as t              #用于图像
import random                   #产生随机数# 递归函数,具体过程,上面有介绍
def koch(size, n):if n == 0:t.pencolor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))t.fd(size)else:for i in [0, 60, -120, 60]:t.left(i)koch(size / 3, n - 1)#稍微封装了下,颜色有点Hua
def per(n):t.color((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))# t.begin_fill()koch(400, n)# t.end_fill()t.color((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))t.begin_fill()t.left(120)t.fd(lenth)t.left(120)t.fd(lenth)t.left(120)koch(400, n)t.end_fill()t.left(60)lenth = 0def main():n = eval(input())t.colormode(255)    #颜色模式设置为255,其它模式有1,string,python文档有详细说明t.speed(0)          #速度快t.setup(1600, 700)  #设置开始时窗体,但没什么必要,直接最大化就好t.pu()t.goto(-300, -350)t.pd()t.pensize(5)koch(400, n)t.left(60)global lenthlenth = t.position()[0] - (-300)# 下面六个部分就为剩下部分绘制per(n)per(n)per(n)per(n)per(n)per(n)t.hideturtle()main()
t.done()

三、素描雪景

from PIL import Image
import numpy as np
import tkinter.filedialog
root = tkinter.Tk().withdraw()
filename = tkinter.filedialog.askopenfilename()  # 打开选择文件对话框
try:depth = 30  # 0-100,越高,颜色越深picture_grad = np.gradient(np.asarray(Image.open(filename).convert('L')).astype('int'))  # 取图像灰度的梯度值grad_x, grad_y = picture_grad[0] * depth / 100., picture_grad[1] * depth / 100.  # 将获取的维度梯度值进行深度处理base = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)  # 降噪基_x, _y, _z = grad_x / base, grad_y / base, 1. / basesce_z, sce_x = np.pi / 2.1, np.pi / 3  # 光源的俯视角度值和方位角度值# 光源对x,y,z 轴的影响dx, dy, dz = np.cos(sce_z) * np.cos(sce_x), np.cos(sce_z) * np.sin(sce_x), np.sin(sce_z)Normalized = 255 * (dx * _x + dy * _y + dz * _z).clip(0, 255)  # 光源归一化im = Image.fromarray(Normalized.astype('uint8'))  # 重构图像im.save('转换后的素描图.jpg')  # 保存转换后的图片im.show()  # 展示转换后的图片
except Exception:print('转换失败!')

四、雪花飘落(版本一)

# -*- coding: utf-8 -*-
import pygame
import random

初始化pygame

pygame.init()

根据背景图片的大小,设置屏幕长宽

SIZE = (670, 690)screen = pygame.display.set_mode(SIZE)
pygame.display.set_caption("故宫下雪了——更多源码可加q群:261823976")
bg = pygame.image.load('1.jpg')

雪花列表

snow_list = []

初始化雪花:[x坐标, y坐标, x轴速度, y轴速度]

for i in range(200):x = random.randrange(0, SIZE[0])y = random.randrange(0, SIZE[1])sx = random.randint(-1, 1)sy = random.randint(3, 6)snow_list.append([x, y, sx, sy])clock = pygame.time.Clock()

游戏主循环

done = False
while not done:# 消息事件循环,判断退出for event in pygame.event.get():if event.type == pygame.QUIT:done = True# 黑背景/图片背景# screen.fill((0, 0, 0))screen.blit(bg, (0, 0))# 雪花列表循环for i in range(len(snow_list)):# 绘制雪花,颜色、位置、大小pygame.draw.circle(screen, (255, 255, 255), snow_list[i][:2], snow_list[i][3]-3)# 移动雪花位置(下一次循环起效)snow_list[i][0] += snow_list[i][2]snow_list[i][1] += snow_list[i][3]# 如果雪花落出屏幕,重设位置if snow_list[i][1] > SIZE[1]:snow_list[i][1] = random.randrange(-50, -10)snow_list[i][0] = random.randrange(0, SIZE[0])# 刷新屏幕pygame.display.flip()clock.tick(20)

退出

pygame.quit()

雪花飘落轨迹是运动的(自然飘落),不过我懒,就不给你们做动图拉~自己复制代码去看吧

五、雪花飘落(版本二)

导入模块

import pygame
import random
#pygame初始化
pygame.init()

声明屏幕/窗口size大小,与背景图片的大小一样才能完美显示

SIZE = (1025, 640)

给屏幕设置大小,参数为上面设置的大小

screen = pygame.display.set_mode(SIZE)

设置标题

pygame.display.set_caption("霸道与雪")

加载背景图

background = pygame.image.load('1.png')

定义一个雪花列表

snow = []
# 初始化雪花
for i in range(300):#randrange()方法返回指定递增基数集合中的一个随机数#randrange()是不能直接访问的,需要导入random模块,然后通过ranom静态对象调用x = random.randrange(0, SIZE[0])y = random.randrange(0, SIZE[1])#ranint用于生成指定范围内的随机整数speedx = random.randint(-1, 1)speedy = random.randint(3,6)snow.append([x, y, speedx, speedy])
#创建时钟对象,用来控制游戏循环频率
clock = pygame.time.Clock()done = False
while not done:# 消息事件循环,判断退出for event in pygame.event.get():if event.type == pygame.QUIT:done = True#绘制位图screen.blit(background, (0,0))

雪花列表循环

    for i in range(len(snow)):# 绘制雪花,颜色、位置、大小pygame.draw.circle(screen, (255, 255, 255), snow[i][:2], snow[i][3]-3)# 移动雪花位置(下一次循环起效)snow[i][0] += snow[i][2]snow[i][1] += snow[i][3]# 如果雪花落出屏幕,重设位置if snow[i][1] > SIZE[1]:snow[i][1] = random.randrange(-50, -10)snow[i][0] = random.randrange(0, SIZE[0])#更新显示到屏幕表面pygame.display.flip()#每秒循环20次clock.tick(20)pygame.quit()

雪花飘落轨迹一样是运动的(自然飘落)

六、雪花飘落(版本三)

导入模块

#PerpetualSmile 
import pygame
import random
import os
from PIL import Image
from pygame.sprite import Sprite
from pygame.sprite import Group
from PIL import ImageGrab
import shutil

表示单个雪花的类

class Snow(Sprite):def __init__(self, image, pos, speed, size, screen):super().__init__()self.screen = screenself.speed= speedself.pos = posself.image = pygame.transform.scale(image, size)self.rect = self.image.get_rect()self.rect.x = pos[0]self.rect.y = pos[1]def blitme(self):self.screen.blit(self.image, self.rect)def update(self):self.rect.x += self.speed[0]self.rect.y += self.speed[1]# 雪花旋转self.image = pygame.transform.rotate(self.image, 90)if self.check_edges():self.rect.x = self.pos[0]self.rect.y = self.pos[1]def check_edges(self):screen_rect = self.screen.get_rect()if self.rect.top >= screen_rect.bottom:return Truereturn Falsedef add_snow(path):pygame.init()size = Image.open(path).sizescreen = pygame.display.set_mode(size, pygame.NOFRAME)s = pygame.display.get_surface()bg = pygame.image.load_extended(path).convert()screen.blit(bg, (0, 0))# 加载雪花图片snow_image = pygame.image.load_extended('snow.png')snow_group = Group()for i in range(500):# 雪花起始位置pos = (random.randint(-size[0], size[0]), random.randint(-size[1], 0))# 控制雪花大小n = random.randint(4, 12)snow_size = (n, n)# 雪花下落速度speed = (2, random.randint(2, 7))snow_group.add(Snow(snow_image, pos, speed, snow_size, screen))clock = pygame.time.Clock()# 创建文件夹用于保存每一帧图片if not os.path.exists("frames"):os.makedirs("frames")flag = Truenum = 1;while flag:for event in pygame.event.get():# 退出窗口if event.type == pygame.QUIT:flag = Falsescreen.blit(bg, (0, 0))for snow in snow_group.copy():snow.blitme()snow_group.update()# 保存当前画面pygame.image.save(screen, "frames\\"+str(num)+".jpg")# 刷新屏幕pygame.display.update()# 设置fpsclock.tick(30)if num >= 250:breaknum += 1

制作GIF图

    im = Image.open("frames\\1.jpg")images = []size = (int(im.size[0]/2), int(im.size[1]/2))for file in range(2, num + 1):filepath = "frames\\" + str(file) + ".jpg"temp = Image.open(filepath)temp = temp.resize(size, Image.ANTIALIAS)images.append(temp)im = im.resize(size, Image.ANTIALIAS)im.save('snow.gif', save_all=True, append_images=images, loop=2, duration=5)# 删除保存中间图片文件的文件夹shutil.rmtree("frames")
if __name__ == '__main__':add_snow('5.jpg')

好啦~今天的代码分享就到这里拉

推荐往期文章

🎯 博主所有文章素材、解答、源码、教程领取处:点击

对python感兴趣的小伙伴也可以看一下博主其他相关文章哦~

python小介绍:

python是什么?工作前景如何?怎么算有基础?爬数据违法嘛?。。

python数据分析前景:

用python分析“数据分析”到底值不值得学习,以及学完之后大概能拿到多少工资

python基础自测题:

Python 800 道习题 (°ー°〃) 测试你学废了嘛

最后推荐一套Python视频给大家,希望对大家有所帮助:

全套教程!你和大佬只有一步之遥【python教程】

尾语

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

请添加图片描述

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...