基于Python如何实现图片一键切割九宫格工具

免费教程   2024年04月24日 18:31  

本文小编为大家详细介绍“基于Python如何实现图片一键切割九宫格工具”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python如何实现图片一键切割九宫格工具”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

实现代码

"""1.将一张图片填充为正方形2.将文字加到方形图片上3.讲图片切为9张图并存储"""importosfromtkinterimportfiledialogfromPILimportImagefromfuture.movesimporttkinter#填充文字的库importPILfromPILimportImageFont,Image,ImageDrawdefopen_img():"""打开图片:return:"""root=tkinter.Tk()#创建一个Tkinter.Tk()实例root.withdraw()#将Tkinter.Tk()实例隐藏default_dir=r"文件路径"file_path=filedialog.askopenfilename(title=u'选择文件',initialdir=(os.path.expanduser(default_dir)))iflen(file_path)!=0:image=Image.open(file_path)fill_image(image)else:SystemExit()deffill_image(img):"""将图片填充为正方形:paramimg:图片:return:"""width,height=img.size#选取长和宽中较大值作为新图片的new_image_length=widthifwidth>heightelseheight#生成新图片[白底]new_image=Image.new(img.mode,(new_image_length,new_image_length),color='white')#将之前的图粘贴在新图上,居中ifwidth>height:#原图宽大于高,则填充图片的竖直维度#(x,y)二元组表示粘贴上图相对下图的起始位置new_image.paste(img,(0,int((new_image_length-height)/2)))else:new_image.paste(img,(int((new_image_length-width)/2),0))#图片上写上文字#设置字体,如果没有,也可以不设置font=ImageFont.truetype(r"C:\Windows\Fonts\STHUPO.TTF",50)datas='V:xlzcm88或xlzcm66'bytedatas=datas.encode('UTF-8')draw=ImageDraw.Draw(new_image)draw.text((0,new_image.size[1]/2),u'V:xlzcm88或xlzcm66',font=font)cut_image(new_image)defcut_image(img):"""切图:paramimg:填充成方形后的图片:return:"""width,height=img.sizeitem_width=int(width/3)box_list=[]foriinrange(0,3):#两重循环,生成9张图片基于原图的位置forjinrange(0,3):box=(j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)box_list.append(box)img_list=[img.crop(box)forboxinbox_list]save_images(img_list)defsave_images(img_list):"""保存切割完成的图片:paramimg_list:切割后的图片列表:return:"""index=1files_path='Pic'#若文件夹不存在,则创建ifnotos.path.exists(files_path):os.makedirs(files_path)forimginimg_list:img.save('./Pic/'+str(index)+'.png','PNG')index+=1print('完成')if__name__=='__main__':open_img()

方法补充

除了上文的方法,小编还给大家整理了其他图片切割成九宫格的方法,希望对大家有所帮助

#-*-coding:utf-8-*-fromPILimportImageimportsys#将图片填充为正方形deffill_image(image):width,height=image.size#选取长和宽中较大值作为新图片的new_image_length=widthifwidth>heightelseheight#生成新图片[白底]new_image=Image.new(image.mode,(new_image_length,new_image_length),color='white')#将之前的图粘贴在新图上,居中ifwidth>height:#原图宽大于高,则填充图片的竖直维度new_image.paste(image,(0,int((new_image_length-height)/2)))#(x,y)二元组表示粘贴上图相对下图的起始位置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):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('./output/'+str(index)+'.jpg')index+=1if__name__=='__main__':file_path="./output/girl.jpg"image=Image.open(file_path)image.show()image=fill_image(image)image_list=cut_image(image)save_images(image_list)

读到这里,这篇“基于Python如何实现图片一键切割九宫格工具”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部