【python】昔去雪如花,今来花似雪,今日份雪花快递到啦

news2024/9/22 15:25:36

前言

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

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

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

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

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

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

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

让我们打开我们的奇思妙想,用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-8

def 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")  # silver
            width(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 = 0


def 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 lenth
    lenth = 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. / base
    sce_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 = screen
        self.speed= speed
        self.pos = pos
        self.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 True
        return False



def add_snow(path):
    pygame.init()
    size = Image.open(path).size
    screen = 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 = True
    num = 1;
    while flag:
        for event in pygame.event.get():
            # 退出窗口
            if event.type == pygame.QUIT:
                flag = False

        screen.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()

        # 设置fps
        clock.tick(30)
        if num >= 250:
            break
        num += 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教程】

尾语

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

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

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

—— 心灵鸡汤

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

请添加图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用 django-import-export + pandas 在 Django 视图中导入 excel 数据

我想每个人都熟悉所有强大的库 django-import-export,它允许我们在 Django 的管理面板中导入和导出数据,但是如果你想让用户在网络上上传 excel 文件或通过 REST 上传它怎么办应用程序接口。最近,我遇到了类似的问题。经过大量研究,我找到了一种使用 Django 方式将数千个数…

基于jsp+mysql+ssm生鲜超市进销存管理系统-计算机毕业设计

项目介绍 目前超市越来越多,越来越普及,如何高效的管理经营超市才是成功的关键,其中对于中小型超市来说,在降低成本的前提下使用最有效的管理方式是非常重要的,所以开发中小型超市管理系统既考虑了成本相对较低又非常实用的特点。…

博客系统(前后端分离)

文章目录前言一、需求分析1.功能2.环境二、前端实现1.博客注册页2.博客登录页3.博客列表页4.博客详情页5.博客编辑页三、后端实现1.设计数据库表2.封装连接数据库的公共操作3.封装对博客表和用户表的操作4.实现博客列表页、博客详情页、博客编辑页的后端服务5.实现博客登录页面…

linux关于ssh免密登录、known_hosts文件

1. 关于ssh SSH 是 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是目前广泛采用的安全登录协议,专为远程登录会话和其他网络服务提供安全性的协议,替代以前不安全的Telnet协议。利用 SSH 协议可以有效防止远程管理过程中的…

springboot车辆管理系统的设计与实现毕业社会源码031034

车辆管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中&…

java常量定义在interface和final class的区别?

问题现象: java常量定义在 interface 和 final class 的区别? 问题分析: 最近在项目开发规范中,发现有要求使用 interface类 来定义常量! 这让我想起来以前一直是用 final class 来定义常量的;那么这两者是…

【Eigen】Eigen库基础语法

这里是Eigen库的一些基础语法&#xff0c;摘自《视觉SLAM十四讲》&#xff0c;修改了书中代码的一些bug&#xff0c;部分地方添加了一些自己的理解。 头文件相关 #include <Eigen/Core> // Eigen 核心部分 #include <Eigen/Dense> // 稠密矩阵的代数运算&#xff…

Java - 通过反射进行赋值以及函数调用

Java - 通过反射进行赋值以及函数调用前言一. 通过反射进行赋值1.1 测试1.2 总结二. 通过反射进行函数调用前言 说来惭愧&#xff0c;虽然反射在Java中是非常重要和常见的一种机制。但是&#xff0c;每当自己去写这方面的代码的时候&#xff0c;总是容易愣住。还得想一想代码怎…

题库API搭建接口

题库API搭建接口 本平台优点&#xff1a;免费查题接口搭建 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a;题库后台http://daili.jueguangzhe.cn/ 题库后台…

社招前端vue面试题汇总

用过pinia吗&#xff1f;有什么优点&#xff1f; 1. pinia是什么&#xff1f; 在Vue3中&#xff0c;可以使用传统的Vuex来实现状态管理&#xff0c;也可以使用最新的pinia来实现状态管理&#xff0c;我们来看看官网如何解释pinia的&#xff1a;Pinia 是 Vue 的存储库&#xff…

机器学习数据不均衡处理教程

机器学习数据不均衡处理教程 学习对数据进行过采样和欠采样、应用 SMOTE、集成方法和成本敏感型学习假设 课程英文名&#xff1a;Machine Learning with Imbalanced Data 此视频教程共13.5小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 下…

Apriori算法及例题

一&#xff1a;Apriori算法介绍 关联规则挖掘是数据挖掘中最活跃的研究方法之一 。最早是由 Agrawal 等人提出的1993最初提出的动机是针对购物篮分析问题提出的&#xff0c;其目的是为了发现交易数据库中不同商品之间的联系规则。这些规则刻画了顾客购买行为模式&#xff0c;可…

Java去除文档阴影

Java去除文档阴影 一、前言 文稿扫描大家用的都比较频繁、想是各种证件、文件都可以通过扫描文稿功能保存到手机。相比直接拍照&#xff0c;在扫描文稿时&#xff0c;程序会对图像进行一些矫正。比如去除阴影、修正倾斜、旋转矫正等。进行这些处理后的图片要更加容易识别。今…

学习下c++原来它和Java有很多相似的地方

Java和CJava和C区别简单学习下C语法C 是什么&#xff1f;C工作原理&#xff1a;C标识符C基本数据类型C关键字封装&#xff0c;继承&#xff0c;多态简单回顾下Java语法Java的基础语法&#xff1a;Java注释Java标识符Java修饰符Java 接口和继承Java8 新增的特性Java和C区别 Java…

VTK-vtkPointInterpolator/vtkInterpolatorKernel

欢迎大家加入社区&#xff0c;雪易VTK社区-CSDN社区云 前言&#xff1a;目前在做模型的ReMesh&#xff0c;在研究这个接口&#xff0c;希望能有所帮助。 vtkPointInterpolator 描述&#xff1a; 变量&#xff1a; Strategy&#xff1a;MASK_POINTS, NULL_VALUE, CLOSEST_POI…

【css遇到的问题】vue中使用select下拉框,数据绑定但是默认不显示问题

文章目录问题描述原因分析问题描述 在vue中使用原生的select下拉框的时候&#xff0c;绑定数据内容但是发现其中默认显示第一条的并不显示 需求实现效果 实际实现效果 循环出select内的数据以后&#xff0c;发现原本默认显示第一条的select框变成了空白&#xff0c;要选择后…

【Mysql】事务

文章目录一.什么是事务1.1. 事物的属性1.2. 事务的版本支持1.3. 事务的提交方式1.4. 事务常见操作证明事务的回滚事务崩溃情况下验证回滚结论二.事务隔离级别2.1. 如何理解隔离性2.2. 隔离性级别2.3. 脏读,幻读,不可重复读2.4. 查看,设置隔离级别2.5. 隔离性验证三.一致性(Cons…

T046基于51单片机无线蓝牙控制8位LED灯亮灭proteus仿真原理图PCB

功能&#xff1a; 0.本项目采用STC89C52作为单片机系统的控制MCU 1.通过蓝牙发送指令控制LED灯 2.通过手机APP可以控制8路LED灯的亮灭&#xff0c;可以全亮全灭。 3.通过手机APP可以控制8路LED灯的亮度。每个灯的亮度有3档。具体控制指令如下 a)发送Ox&#xff0c;开启指定LED灯…

日常学习之:Yaml 和 Json 有什么区别

安装 json 是 python 内置 yaml 需要安装 pip install pyyaml格式 对于同样一段数据&#xff1a; test_data {"金山中学":{"101班":{"王宁": {"语文":33,"数学":22,"英语":18}}}}我们用下面的代码分别存入 ya…

ALE的基本介绍、使用与配置

本文将介绍ale插件的基本使用与配置&#xff0c;将从linter的介绍到具体插件的使用与bug的修复~ 本文仅仅时抛砖引玉&#xff0c;更多的使用技巧与功能可以查看项目介绍 ALE的基本介绍、使用与配置ale的介绍ale的基本配置与使用查看你可用的linter安装iverilog——for windowal…