ome/img/nav3_on.png">
APP
系统平台
  • 建站知识
  • 联系我们
  • 咨询热线 :
    028-86922220

    疆括仕网站建设,新征程启航

    为企业提供网站建设、域名注册、服务器等服务

    太厉害了!用Python做一个大风车, 继续吱呦呦地转!

    大风车,吱呀吱呦呦地转,

    为宽城等地区用户提供了全套网页设计制作服务,及宽城网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、宽城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

    这里的风景呀真好看!天好看,地好看……

    一首熟悉的歌曲,是否已经把你拉回了童年?

    这首歌,估计是每个80后、90后的童年记忆!

    小时候守着家里的电视,只要听到这个主题曲,就代表马上会有各种好看的动画片播出。

    又是一年6·1儿童节,作为一个Python号,当然又要想想能用python做点什么啦——

    Turtle绘制大风车

    第一步,先观察风车的重要组成部分,四个扇叶和一个支撑杆。

    其中扇叶可以通过构建一个函数,重复绘制4次获得。

    以下是绘制风车扇叶的代码部分。

    def draw_sector(col1,col2):
    turtle.color(col1,col1)
    turtle.circle(30,90)
    turtle.right(90)
    turtle.begin_fill()
    turtle.fd(120)
    turtle.right(90)
    turtle.fd(150)
    turtle.right(135)
    turtle.fd(150*(1.414)-30)
    turtle.end_fill()
    turtle.color(col2,col2)
    turtle.begin_fill()
    turtle.right(90)
    turtle.circle(30,90)
    turtle.right(90)
    turtle.fd(75*1.414-30)
    turtle.right(90)
    turtle.fd(150/1.414)
    turtle.right(135)
    turtle.fd(120)
    turtle.end_fill()
    turtle.right(90)

    而我们只需要循环四次,即可获得风车的最核心部分。

    # 绘制四个扇形
    turtle.pensize(3)
    draw_sector('green','darkgreen')
    draw_sector((26,188,156),(22,160,133))
    draw_sector((241,196,15),(243,156,18))
    draw_sector((231,76,60),(192,57,43))

    具体绘制过程如下图所示

    • 注:为了能在turtle库使用RGB色彩表示法,小五额外在代码中添加一行:

    turtle.Screen().colormode(255)

    这样最核心的部分已经画完,那支撑杆就更简单了。

    只需要设置合适的宽度和颜色,画一条线段即可。

    turtle.pensize(50)
    turtle.goto(0,32)
    turtle.right(90)
    turtle.color('lightgray')
    turtle.fd(350)

    最终呈现效果

    这样我们就画好了一个可以手持的风车,但故事才刚刚开始。

    如何让大风车,吱呀吱呦地转起来,才是今天文章的重中之重。

    这里我采用的方法是:

    1. 用Turtle绘制旋转不同角度的大风车
    2. 将Turtle绘制的界面保存成本地图片
    3. 将所有角度的图片合成一个 gif 动图

    上述这几步,都可以用python实现自动处理,那就简单多了。

    保存为jpg图片

    首先,海龟绘图(Turtle Graphics)库是一个非常好用的矢量绘图工具。

    但想将其绘图结果保存为本地图片还需要好几步。

    # 保存eps
    ts = turtle.getscreen()
    ts.getcanvas().postscript(file=r"结果.eps")

    上面两行代码只能将Turtle绘图保存为eps矢量格式。

    eps格式图片可以用PS打开,再手动另存为png、jpg等。但太麻烦了,学会了python肯定优先考虑python批量转换。

    通过查找,发现可以用PIL来进行图片格式转换。

    from PIL import Image
    im = Image.open("结果.eps")
    im.save("结果.jpg", "JPEG")

    但是大家如果直接运行我代码的话,会有报错:OSError: Unable to locate Ghostscript on paths

    意思是没有在环境变量中找到 Ghostscript,这就需要下载安装软件[1]

    官网下载地址:https://www.ghostscript.com/download/gsdnld.html

    安装跟自己电脑匹配的版本,然后再配置环境变量。

    比如我自己是直接安装到C盘上了,就要将C:\Program Files\gs\gs9.54.0\bin加到path上,来配置好环境变量。

    最后,再重启下IDE或命令行,就可以正常用了(因为修改path后,当前运行环境下需重启才能生效)。

    经过以上步骤的设置,我们以后就可以直接下载turtle的绘图结果了,而不再需要去截图。

    绘制不同角度的图片

    绘制不同角度的图片,其实有很多办法,这里我只讲一种方案。

    圆周长 = 圆周率 × 半径 × 2,用字母公式就是C = 2πr。

    我的方案就是:海龟箭头先绕着半径30的圆,每次前进不同的周长,然后再正常绘图。这样,就相当于绕着这个中心不停旋转地作图。

    再搭配上前面学到的保存Turtle为保存jpg,这样就能生成360°不同角度的风车图片了。

    for i in range(116):
    draw_windmill(i)

    批量绘制+另存为

    这样我们生成了大概100多张图片。

    图片合成 gif 动图

    如何将图片合成 gif 动图?

    我直接参考了黄同学之前的文章[2]代码来用,关键的步骤都有注释。

    这样就可以用python合成图片为gif动图了

    def func(DURATION):
    # 获取当前的工作路径
    path = os.getcwd()
    # 获取当前工作路径下的文件列表
    file_list = os.listdir(path)
    # 复制文件列表到另外一个列表
    jpg_list = file_list.copy()
    # 移除结尾不是png的图片,只保留结尾都是png的图片
    for file in file_list:
    if file[-3:]!= "jpg":
    jpg_list.remove(file)
    # 将图片中的数字,升序排列
    jpg_list.sort(key=lambda x: float(x[:-4]))
    # 获取每张图片的绝对路径,并获取每张照片的RGB通道值,将7张照片的RGB通道值,保存在一个列表中
    print(jpg_list)
    frames = []
    for png in jpg_list:
    image_path = os.path.join(path, png)
    frames.append(imageio.imread(image_path))
    # 将图片保存为gif图,并设置间隔时间
    gif_path = os.path.join(path, "my_gif.gif")
    imageio.mimsave(gif_path, frames, 'GIF', duration=DURATION)

    设置好间隔时间,执行一下

    func(0.008)

    看看效果

    旋转的手持大风车

    池塘边的榕树上,知了在声声叫着夏天......

    希望我画的这个大风车,能带给大家关于童年的回忆。

    代码下载

    如果有小伙伴对本文代码感兴趣,    在公众号后台回复“小助手” ,找他获取,暗号61,即可获取全部代码!


    分享标题:太厉害了!用Python做一个大风车, 继续吱呦呦地转!
    本文来源:https://tyhkzb.com/article/dhgcdgj.html
    在线咨询
    服务热线
    服务热线:028-86922220
    TOP