python简笔画绘制 数据驱动绘图_python:绘制枫叶简笔画

5ab5c9ea15ce36d310c00aaff4de3080e850b11a.jpeg?token=a1d49d106ba48c69f063a6964616e44d

上面是枫叶的简笔图,我们怎么用python程序来完全模拟以上的图片呢?01今天为大家带来用python画枫叶的详细过程。

首先,我们保存上面的图片为“枫叶.jpg”,放到python的目录下。打开python编辑器(本篇使用的pycharm)

函数实现

导入所需的库函数:

from PIL import Image

import turtle as t

267f9e2f07082838ab12613c6bb2a3064c08f1aa.jpeg?token=0d42c7e7b02dd5e58e49496b5dedf825

接下来,通过PIL读取图片的信息,对接turtle画图库完成绘制过程。

读取图片的函数:

def leave(path):

img = Image.open(path) # 读取图像

global size

size=img.size

pix = img.load()

list = [[] for i in range(size[1])] # 构造空列表

for i in range(0, size[1]): # 从第一行开始循环

k = 0

for j in range(0, size[0]-1):

# 如果当前像素与下一个像素值不同且两者有一为背景色,则记录坐标

if pix[j, i] != pix[j + 1, i] and (255, 255, 255) in [pix[j, i], pix[j + 1, i]]:

if k == 0: # index值为0说明是像素条起始坐标

list[i].append([j + 1, ])

k += 1

else: # index值为1说明记录的是像素条结束坐标

list[i][-1].append(j)

k = 0

return list

b3119313b07eca80579d53dc5d0e9ddaa1448321.jpeg?token=f1a646b03634f49cf62441a8f0e38a83

绘制的函数:

def draw(path):

l=leave(path)

# 绘图窗口大小

t.screensize(canvwidth=size[0], canvheight=size[1],bg='white')

t.speed(1000)

for i in range(0, size[1]):

# 遍历每一行

t.pencolor('black')

for line in l[i]:

# 遍历每一个像素条

t.penup()

t.goto(line[0] - size[0] // 2, (size[1] - i) - size[1] // 2)

t.pendown()

t.goto(line[1] - size[0] // 2, (size[1] - i) - size[1] // 2)

t.mainloop()

29381f30e924b899af940d6fa52b17920b7bf6f5.jpeg?token=e1f182b18c500f82526c95bc2bb5dfa7

最后,调用函数,运行程序:

draw('枫叶.jpg')

91ef76c6a7efce1b283afe71647cf9d9b48f6528.jpeg?token=4423f51eda05509e197dd166e0179600

运行结果

turtle努力绘画中......

(画笔有一点粗反而让图片更好看了)

过了几分钟。。。

7af40ad162d9f2d31d5f162d62c180146227cc5e.jpeg?token=ead623e703006fafa00154f39e9c8236

又过了几分钟。。。

962bd40735fae6cd2f672461c49e052343a70f97.jpeg?token=5e33347ae5e7bfac50730e293065b798

终于画完了,turtle表示过度劳累。。。

d058ccbf6c81800ae5ff65267d1839fd828b47b1.jpeg?token=4d5fb6c57af1163cfc38ea14429c0d1b

今天的内容就到这了,我是01,我们明天再见!(觉得好玩的小伙伴关注我吧)

b7fd5266d0160924db2d0fcc182a3ffde7cd3495.jpeg?token=f165df3d57293deaa2fb6c28e3282b7c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值