以下文章来源于腾讯云 作者:Python进阶者
( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
本文说明
为什么要学习python?是因为不仅社会上很多工作需要用到python,同时我们可以利用python做很多好玩儿的事儿,
PS:我帮女朋友曾经做了个人的动态二维码和图片切分为九宫格,她就很开心呀!毕竟她是文科生,就会觉得你很牛逼!所以有趣的技术还是需要学习。
当然python还有很多用途,等待着我们去发现,相信它会给你的学习生活带来乐趣。
本文同样是利用小猪佩奇带着大家学习python的几个好玩儿的操作(大纲如下),俗话说:“兴趣是最好的老师”,我们只有喜欢上一门语言,才会有学好它的欲望。
- 1.利用python绘制一个小猪佩奇;
- 2.利用python给小猪佩奇换背景色;
- 3.利用python将小猪佩奇切分为九宫格;
- 4.利用python制作小猪佩奇动态二维码;
1.利用python绘制一个小猪佩奇
turtle库是一个很好的python图形绘制库,利用它我们可以绘制各种各样的图形、小动物。这个库其实并不难,实际你怎么绘制这个图形,对应的代码,就跟着你的实际绘制图形的方向走下去,即可。PS:当你有孩子了,是不是既可以利用turtle教他们绘制某些图案,还可以培养他们的编程兴趣,好处很多哦!
<span>from</span> turtle <span>import</span> * <span>#</span><span> 绘制鼻子</span> <span>def</span><span> nose(x,y): penup() goto(x,y) pendown() setheading(</span>-30<span>) begin_fill() a</span>=0.4 <span>for</span> i <span>in</span> range(120<span>): </span><span>if</span> 0<=i<30 <span>or</span> 60<=i<90<span>: a</span>=a+0.08<span> left(</span>3<span>) forward(a) </span><span>else</span><span>: a</span>=a-0.08<span> left(</span>3<span>) forward(a) end_fill() penup() setheading(</span>90<span>) forward(</span>25<span>) setheading(0) forward(</span>10<span>) pendown() pencolor(</span>255,155,192<span>) setheading(</span>10<span>) begin_fill() circle(</span>5<span>) color(</span>160,82,45<span>) end_fill() penup() setheading(0) forward(</span>20<span>) pendown() pencolor(</span>255,155,192<span>) setheading(</span>10<span>) begin_fill() circle(</span>5<span>) color(</span>160,82,45<span>) end_fill() </span><span>#</span><span> 绘制头部</span> <span>def</span><span> head(x,y): color((</span>255,155,192),<span>"</span><span>pink</span><span>"</span><span>) penup() goto(x,y) setheading(0) pendown() begin_fill() setheading(</span>180<span>) circle(</span>300,-30<span>) circle(</span>100,-60<span>) circle(</span>80,-100<span>) circle(</span>150,-20<span>) circle(</span>60,-95<span>) setheading(</span>161<span>) circle(</span>-300,15<span>) penup() goto(</span>-100,100<span>) pendown() setheading(</span>-30<span>) a</span>=0.4 <span>for</span> i <span>in</span> range(60<span>): </span><span>if</span> 0<=i<30 <span>or</span> 60<=i<90<span>: a</span>=a+0.08<span> left(</span>3<span>) forward(a) </span><span>else</span><span>: a</span>=a-0.08<span> left(</span>3<span>) forward(a) end_fill() </span><span>#</span><span> 绘制耳朵</span> <span>def</span><span> ears(x,y): color((</span>255,155,192),<span>"</span><span>pink</span><span>"</span><span>) penup() goto(x,y) pendown() begin_fill() setheading(</span>100<span>) circle(</span>-50,50<span>) circle(</span>-10,120<span>) circle(</span>-50,54<span>) end_fill() penup() setheading(</span>90<span>) forward(</span>-12<span>) setheading(0) forward(</span>30<span>) pendown() begin_fill() setheading(</span>100<span>) circle(</span>-50,50<span>) circle(</span>-10,120<span>) circle(</span>-50,56<span>) end_fill() </span><span>#</span><span> 绘制眼睛</span> <span>def</span><span> eyes(x,y): color((</span>255,155,192),<span>"</span><span>white</span><span>"</span><span>) penup() setheading(</span>90<span>) forward(</span>-20<span>) setheading(0) forward(</span>-95<span>) pendown() begin_fill() circle(</span>15<span>) end_fill() color(</span><span>"</span><span>black</span><span>"</span><span>) penup() setheading(</span>90<span>) forward(</span>12<span>) setheading(0) forward(</span>-3<span>) pendown() begin_fill() circle(</span>3<span>) end_fill() color((</span>255,155,192),<span>"</span><span>white</span><span>"</span><span>) penup() setheading(</span>90<span>) forward(</span>-25<span>) setheading(0) forward(</span>40<span>) pendown() begin_fill() circle(</span>15<span>) end_fill() color(</span><span>"</span><span>black</span><span>"</span><span>) penup() setheading(</span>90<span>) forward(</span>12<span>) setheading(0) forward(</span>-3<span>) pendown() begin_fill() circle(</span>3<span>) end_fill() </span><span>#</span><span> 绘制腮帮</span> <span>def</span><span> cheek(x,y): color((</span>255,155,192<span>)) penup() goto(x,y) pendown() setheading(0) begin_fill() circle(</span>30<span>) end_fill() </span><span>#</span><span> 绘制嘴巴</span> <span>def</span><span> mouth(x,y): color(</span>239,69,19<span>) penup() goto(x,y) pendown() setheading(</span>-80<span>) circle(</span>30,40<span>) circle(</span>40,80<span>) </span><span>#</span><span> 绘制身体</span> <span>def</span><span> body(x,y): color(</span><span>"</span><span>red</span><span>"</span>,(255,99,71<span>)) penup() goto(x,y) pendown() begin_fill() setheading(</span>-130<span>) circle(</span>100,10<span>) circle(</span>300,30<span>) setheading(0) forward(</span>230<span>) setheading(</span>90<span>) circle(</span>300,30<span>) circle(</span>100,3<span>) color((</span>255,155,192),(255,100,100<span>)) setheading(</span>-135<span>) circle(</span>-80,63<span>) circle(</span>-150,24<span>) end_fill() </span><span>#</span><span> 绘制手</span> <span>def</span><span> hands(x,y): color((</span>255,155,192<span>)) penup() goto(x,y) pendown() setheading(</span>-160<span>) circle(</span>300,15<span>) penup() setheading(</span>90<span>) forward(</span>15<span>) setheading(0) forward(0) pendown() setheading(</span>-10<span>) circle(</span>-20,90<span>) penup() setheading(</span>90<span>) forward(</span>30<span>) setheading(0) forward(</span>237<span>) pendown() setheading(</span>-20<span>) circle(</span>-300,15<span>) penup() setheading(</span>90<span>) forward(</span>20<span>) setheading(0) forward(0) pendown() setheading(</span>-170<span>) circle(</span>20,90<span>) </span><span>#</span><span> 绘制脚</span> <span>def</span><span> foot(x,y): pensize(</span>10<span>) color((</span>240,128,128<span>)) penup() goto(x,y) pendown() setheading(</span>-90<span>) forward(</span>40<span>) setheading(</span>-180<span>) color(</span><span>"</span><span>black</span><span>"</span><span>) pensize(</span>15<span>) forward(</span>20<span>) pensize(</span>10<span>) color((</span>240,128,128<span>)) penup() setheading(</span>90<span>) forward(</span>40<span>) setheading(0) forward(</span>90<span>) pendown() setheading(</span>-90<span>) forward(</span>40<span>) setheading(</span>-180<span>) color(</span><span>"</span><span>black</span><span>"</span><span>) pensize(</span>15<span>) forward(</span>20<span>) </span><span>#</span><span> 绘制尾巴</span> <span>def</span><span> tail(x,y): pensize(</span>4<span>) color((</span>255,155,192<span>)) penup() goto(x,y) pendown() setheading(0) circle(</span>70,20<span>) circle(</span>10,330<span>) circle(</span>70,30<span>) </span><span>#</span><span> 设置画布和画笔</span> <span>def</span><span> setting(): pensize(</span>4<span>) hideturtle() colormode(</span>255<span>) color((</span>255,155,192),<span>"</span><span>pink</span><span>"</span><span>) setup(</span>840,500<span>) speed(</span>10<span>) </span><span>def</span><span> main(): setting() </span><span>#</span><span> 画布和画笔设置</span> nose(-100,100) <span>#</span><span> 鼻子</span> head(-69,167) <span>#</span><span> 头</span> ears(0,160) <span>#</span><span> 耳朵</span> eyes(0,140) <span>#</span><span> 眼睛</span> cheek(80,10) <span>#</span><span> 腮帮</span> mouth(-20,30) <span>#</span><span> 嘴巴</span> body(-32,-8) <span>#</span><span> 身体</span> hands(-56,-45) <span>#</span><span> 手</span> foot(2,-177) <span>#</span><span> 脚</span> tail(148,-155) <span>#</span><span> 尾巴</span> done() <span>#</span><span> 结束</span> <span>if</span> <span>__name__</span> == <span>"</span><span>__main__</span><span>"</span><span>: main()</span>
www#gaodaima.com来源gao!%daima.com搞$代*!码$网搞代码
结果如下:
2.利用python给小猪佩奇换背景色
我们在昨天已经讲述过怎么使用python库给证件照换底色,大家可以参考那篇文章学习一下。换背景色的原理:每一个图像都是由像素点构成的,我们想要替换他们的颜色,就是找到每个像素点对应的位置,然后用指定颜色,去替换它!一般证件照背景色并不是同一种蓝色像素点,无法完成像素点的定位,这就需要我们对图像进行【腐蚀】或【膨胀】,完成图片黑白话,这样白色的像素点是255,就可以很好的定位了。
<span>import</span><span> cv2 </span><span>import</span><span> numpy as np </span><span>#</span><span> 读取照片</span> img=cv2.imread(<span>"</span><span>zhu.jpg</span><span>"</span><span>) </span><span>#</span><span> 图像缩放</span> img = cv2.resize(img,None,fx=0.5,fy=0.5<span>) rows,cols,channels </span>=<span> img.shape </span><span>print</span><span>(rows,cols,channels) cv2.imshow(</span><span>"</span><span>img</span><span>"</span><span>,img) </span><span>#</span><span> 图片转换为灰度图</span> hsv =<span> cv2.cvtColor(img,cv2.COLOR_BGR2HSV) cv2.imshow(</span><span>"</span><span>hsv</span><span>"</span><span>,hsv) </span><span>#</span><span> 图片的二值化处理</span> lower_blue=np.array([90,70,70<span>]) upper_blue</span>=np.array([110,255,255<span>]) mask </span>=<span> cv2.inRange(hsv, lower_blue, upper_blue) </span><span>#</span><span>腐蚀膨胀</span> erode=cv2.erode(mask,None,iterations=1<span>) cv2.imshow(</span><span>"</span><span>erode</span><span>"</span><span>,erode) dilate</span>=cv2.dilate(erode,None,iterations=1<span>) cv2.imshow(</span><span>"</span><span>dilate</span><span>"</span><span>,dilate) </span><span>#</span><span>遍历替换</span> <span>for</span> i <span>in</span><span> range(rows): </span><span>for</span> j <span>in</span><span> range(cols): </span><span>if</span> erode[i,j]==255: <span>#</span><span> 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色</span> img[i,j]=(0,0,255)<span>#</span><span>此处替换颜色,为BGR通道</span> cv2.imshow(<span>"</span><span>res</span><span>"</span><span>,img) </span><span>#</span><span> 窗口等待的命令,0表示无限等待</span> cv2.waitKey(0)
结果如下:
3.利用python将小猪佩奇切分为九宫格
将图片切分为九宫格的原理就是:找到图片对应位置的坐标,然后进行切割。由于是九宫格,我们切分的是3*3,然后利用双层循环遍历对应位置的坐标后,进行图片切割。
<span>from</span> PIL <span>import</span><span> Image </span><span>import</span><span> sys </span><span>#</span><span>将图片填充为正方形</span> <span>def</span><span> fill_image(image): width, height </span>=<span> image.size </span><span>#</span><span>选取长和宽中较大值作为新图片的,小的地方,用图片填充为等宽等高</span> new_image_length = width <span>if</span> width > height <span>else</span><span> height </span><span>#</span><span>生成新图片[白底]</span> new_image = Image.new(image.mode, (new_image_length, new_image_length), color=<span>"</span><span>white</span><span>"</span><span>) </span><span>#</span><span>将之前的图粘贴在新图上,居中</span> <span>if</span> width > height:<span>#</span><span>原图宽大于高,则填充图片的竖直维度</span> <span>#</span><span>(x,y)二元组表示粘贴上图相对下图的起始位置</span> new_image.paste(image, (0, int((new_image_length - height) / 2<span>))) </span><span>else</span><span>: new_image.paste(image, (int((new_image_length </span>- width) / 2<span>),0)) </span><span>return</span><span> new_image </span><span>#</span><span>切图</span> <span>def</span><span> cut_image(image): width, height </span>=<span> image.size item_width </span>= int(width / 3<span>) item_height </span>= int(height / 3<span>) box_list </span>=<span> [] </span><span>#</span><span>双重循环,生成9张图片基于原图的位置</span> <span>#</span><span> 注意:图片左上角是(0,0),右下角是(width,height)</span> <span>for</span> i <span>in</span> range(0,3<span>): </span><span>for</span> j <span>in</span> range(0,3<span>): </span><span>print</span>((j*item_width,i*item_height,(j+1)*item_width,(i+1)*<span>item_height)) box </span>= (j*item_width,i*item_height,(j+1)*item_width,(i+1)*<span>item_height) box_list.append(box) image_list </span>= [image.crop(box) <span>for</span> box <span>in</span><span> box_list] </span><span>return</span><span> image_list </span><span>#</span><span>保存</span> <span>def</span><span> save_images(image_list): index </span>= 1 <span>for</span> image <span>in</span><span> image_list: image.save(str(index) </span>+ <span>"</span><span>.jpg</span><span>"</span><span>) index </span>+= 1<span> file_path </span>= <span>"</span><span>zhuzhu.jpg</span><span>"</span><span> image </span>=<span> Image.open(file_path) image </span>=<span> fill_image(image) image_list </span>=<span> cut_image(image) save_images(image_list)</span>
结果如下:
4.利用python制作小猪佩奇动态二维码
代码说明:如果我们利用的背景图是gif动态图,生成的就是动态二维码。如果利用的背景是静态图,生成的是静态二维码。
<span>from</span> MyQR <span>import</span><span> myqr </span><span>import</span><span> matplotlib.pyplot as plt </span><span>#</span><span> 生成的二维码最终在你电脑的存储位置</span><span> #</span><span> 当你使用了动态图作为背景,这里可以写成".gif",保存出来的就是gif动态二维码!</span> save_name = <span>"</span><span>傻逼1.gif</span><span>"</span><span> myqr.run( </span><span>#</span><span> 该链接表示你想要生成二维码的链接。</span> words=<span>"</span><span>https://www.gaodaima.com/weixin_41261833</span><span>"</span><span>, version</span>=10, <span>#</span><span> 容错率</span> level=<span>"</span><span>H</span><span>"</span>, <span>#</span><span> 纠错水平,范围是L、M、Q、H,从左到右依次升高</span> colorized=True, <span>#</span><span> False为黑白</span> contrast=1.5, <span>#</span><span> 用以调节图片的对比度,1.0 表示原始图片。</span> brightness=1.0, <span>#</span><span> 用来调节图片的亮度。</span> save_name=save_name,<span>#</span><span>存储的文件名</span> <span>#</span><span> 背景图片的路径,你如果给的是".png/.jpg"等静态图片,最终生成的就是静态二维码!</span> <span>#</span><span> 背景图片的路径,你如果给的是".gif"等动态图片,最终只需要保存为".gif",生成的就是动态二维码!</span> picture=r<span>"</span><span>G:1Pycharm_Projectcsdn分享系列小猪佩奇的几个操作动态.gif</span><span>"</span><span> ) </span><span>#</span><span> 查看生成的二维码图片</span> img = Image.open(save_name) <span>#</span><span> 读取所保存的图片展示二维码</span> plt.figure(<span>"</span><span>Image</span><span>"</span>) <span>#</span><span> 图像窗口名称</span> <span>plt.imshow(img) plt.axis(</span><span>"</span><span>off</span><span>"</span>) <span>#</span><span> 关掉坐标轴为 off</span> plt.show()
结果如下: