Py学习  »  Python

十年资深程序员教你用 python 爬虫抓站总结了一些独特的技巧!

Python学习交流 • 5 年前 • 488 次点击  

导读:今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。

小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。

因为画图画曲线不是Python擅长的事情,所以用纯粹的Python来做,会更有挑战,也更有趣。


答案是:掌声送给社会人。

随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平台和社交网络上爆火了,同时网络上遍布了小猪佩奇九步画法。于是我在儿童节这一天画了一下,结果,不忍直视......



▲人家的画

观察这个图像可以发现,小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。这里说的都是“类”,这也正是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条。

在前端技术选型上,画图首先想到的是svg、canvas,但它们本身就擅长画图,而且网上都有在线编辑svg的工具,这就没意思了,我想佩奇也不会答应的。于是我想用纯粹的Python来做,这样更有挑战,因为画图画曲线不是Python擅长的事情。


使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。更丰富详细的功能及知识可以参考:

官方文档:

https://docs.python.org/3/library/turtle.html

源码

from turtle import*

def nose(x,y):#鼻子
 penup()#提起笔
 goto


    
(x,y)#定位
 pendown()#落笔,开始画
 setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)
 begin_fill()#准备开始填充图形
 a=0.4
 for i in range(120): if 0<=i<30 or 60<=i<90:
 a=a+0.08
 left(3) #向左转3
 forward(a) #向前走a的步长
 else:
 a=a-0.08
 left(3)
 forward(a)
 end_fill()#填充完成

 penup()
 setheading(90)
 forward(25)
 setheading(0)
 forward(10)
 pendown()
 pencolor(255,155,192)#画笔颜色
 setheading(10)
 begin_fill() circle(5


    
) color(160,82,45)#返回或设置pencolor和fillcolor
 end_fill()

 penup()
 setheading(0)
 forward(20)
 pendown()
 pencolor(255,155,192)
 setheading(10)
 begin_fill() circle(5) color(160,82,45)
 end_fill()

def head(x,y):#头
 color((255,155,192),"pink")
 penup() goto(x,y)
 setheading(0)
 pendown()
 begin_fill()
 setheading(180) circle(300,-30) circle(100,-60) circle(80,-100) circle(150,-20


    
) circle(60,-95)
 setheading(161) circle(-300,15)
 penup() goto(-100,100)
 pendown()
 setheading(-30)
 a=0.4
 for i in range(60): if 0<=i<30 or 60<=i<90:
 a=a+0.08
 lt(3) #向左转3
 fd(a) #向前走a的步长
 else:
 a=a-0.08
 lt(3)
 fd(a)
 end_fill()

def ears(x,y): #耳朵
 color((255,155,192),"pink")
 penup() goto(x,y)
 pendown()
 begin_fill()
 setheading(100) circle(-50


    
,50) circle(-10,120) circle(-50,54)
 end_fill()

 penup()
 setheading(90)
 forward(-12)
 setheading(0)
 forward(30)
 pendown()
 begin_fill()
 setheading(100) circle(-50,50) circle(-10,120) circle(-50,56)
 end_fill()

def eyes(x,y):#眼睛
 color((255,155,192),"white")
 penup()
 setheading(90)
 forward(-20)
 setheading(0)
 forward(-95)
 pendown()
 begin_fill() circle(15)
 end_fill() color("black")
 penup()
 setheading(90)
 forward(12)
 setheading(0


    
)
 forward(-3)
 pendown()
 begin_fill() circle(3)
 end_fill() color((255,155,192),"white")
 penup()
 seth(90)
 forward(-25)
 seth(0)
 forward(40)
 pendown()
 begin_fill() circle(15)
 end_fill() color("black")
 penup()
 setheading(90)
 forward(12)
 setheading(0)
 forward(-3)
 pendown()
 begin_fill() circle(3)
 end_fill()

def cheek(x,y):#腮
 color((255,155,192))
 penup() goto(x,y)
 pendown()
 setheading(0)
 begin_fill() circle(30)
 end_fill()

def mouth(x,y): #嘴
 color(239,69,19)
 penup() goto


    
(x,y)
 pendown()
 setheading(-80) circle(30,40) circle(40,80)

def setting(): #参数设置
 pensize(4)
 hideturtle() #使乌龟无形(隐藏)
 colormode(255) #将其设置为1.0255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内
 color((255,155,192),"pink")
 setup(840,500)
 speed(10)

def main():
 setting() #画布、画笔设置
 nose(-100,100) #鼻子
 head(-69,167) #头
 ears(0,160) #耳朵
 eyes(0,140) #眼睛
 cheek(80,10


    
) #腮
 mouth(-20,30) #嘴
 done()if __name__ == '__main__':
	main()

还没完哦!进群可获取源码:125240963

欢迎关注我的博客或者公众号哦:https://home.cnblogs.com/u/Python1234/ Python学习交流

思路其实很简单,就是通过turtle模块实现基本的圆,椭圆,曲线等,难点在于,如何定位每个部位的位置(建议先草图画画)。完整代码需要300行,为了限于篇幅,只放了一部分代码。



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/fBEgyByjUA
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/13098
 
488 次点击