今天小墨给大家介绍一个Python库:PIL(Python图像库)来个实际例子,看看50行python代码能做什么神奇的是,这是小莫发的一条朋友圈,在切图之前,有一张。剪完图片后,共有九张图片。成功霸屏。除了可以处理规??则的正方形图片,还可以处理不规则的图片。例如,下图的宽度很宽。你如何处理图片的高度?很简单,取width和height中较大的值,用白色填充,构造一个正方形的图片。当然,要做出这样的图片也是非常容易的,现在很多手机上的图像处理软件都可以实现。小墨举这个例子只是为了给大家介绍一下PIL库。有兴趣的童鞋们也可以练习一下编程哦~好了,现在我们就来看看这个PIL库是什么吧。PIL是一个非常强大的Python镜像它处理标准库,但是由于PIL支持Python2.7,所以使用Python3的程序员在PIL的基础上分离出一个分支,创建了另一个库Pillow,它可以支持Python3。Pillow兼容PIL的大部分语法,而且使用起来非常简单。接下来小墨就说说如何使用PIL库来实现上面介绍的小程序。其实思路很简单:对应代码如下:#-*-coding:utf-8-*-'''将一张图片填成正方形,裁剪成9张图片作者:微信公众号:大数据前沿'''fromPILimportImageimportsys#将图片填充成正方形deffill_image(image):width,height=image.size#选择长宽值较大的作为新图片new_image_length=widthifwidth>heightelseheight#生成新图片[whitebackground]new_image=Image.new(image.mode,(new_image_length,new_image_length),color='white')#把上一张图片贴在新图片上,centerifwidth>height:#原图宽度更大比高度,然后填充图片的垂直维度#(x,y)二元组表示粘贴上图相对于下图的起始位置new_image.paste(image,(0,int((new_image_length-height)/2)))else:new_image.paste(image,(int((new_image_length-width)/2),0))returnnew_image#切图defcut_image(image):width,height=image.sizeitem_width=int(width/3)box_list=[]#(left,upper,right,lower)foriinrange(0,3):#双循环,根据原图位置生成9张图片forjinrange(0,3):#print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))box=(j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)box_list.append(box)image_list=[image.crop(box)forboxinbox_list]returnimage_list#保存defsave_images(image_list):index=1forimageinimage_list:image.save('./result/python'+str(index)+'.png','PNG')index+=1if__name__=='__main__':file_path="python.jpeg"image=Image.open(file_path)#image.show()image=fill_image(image)image_list=cut_image(image)save_images(image_list)相信看完代码你就知道怎么实现了。对于代码中可能难以理解的地方,小墨也给出了相应的解释。注意,请下载代码并运行它。github地址:https://github.com/yangxuan0928/cut_image
