python实现图片九宫格分割


Posted in Python onMarch 07, 2021

大家都知道在微信朋友圈或者微博以及QQ动态中,有很多“强迫症患者”发图片都爱发9张,而有些图是一张图片分成的九宫图,对于这种操作,大家知道是怎么做到的吗?

本文就是用Python做的一个九宫格图片生成器,是一个打包好的exe文件,用户无需部署安装Python的开发环境,在本地就可以运行此程序,以此快速生成九宫格图片。

下面是程序的所有代码,这是一个Python GUI程序,代码不多,也很容易理解:

# -*- coding: UTF-8 -*-
# 将一张图片分成九张,九宫格
import tkinter as tk
from PIL import Image 
import sys 
 
 
#先将 input image 填充为正方形 
def fill_image(image): 
 width, height = image.size 
 #选取长和宽中较大值作为新图片的 
 new_image_length = width if width > height else height 
 #生成新图片[白底] 
 new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white') #注意这个函数! 
 #将之前的图粘贴在新图上,居中 
 if width > 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)) 
 return new_image 
 
# 分割图片 
def cut_image(image):
 width, height = image.size
 item_width = int(width / 3) #因为朋友圈一行放3张图。
 box_list = []
 # (left, upper, right, lower)
 for i in range(0,3):
 for j in range(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) for box in box_list]
 return image_list
 
#保存图片 
def save_images(image_list): 
 index = 1 
 for image in image_list: 
 image.save(str(index) + '.png', 'PNG') 
 index += 1 
 
 
# 点击按钮,实现图片分割
def cTofClicked():
 file_path=str(entryCd.get()) # 获取要进行分割的图片路径
 image = Image.open(file_path) 
 #image.show() 
 image = fill_image(image) 
 image_list = cut_image(image) 
 save_images(image_list) 
 labelcTof.config(text="九宫格图片已生,请在程序所在目录查看!")
 
# 窗体
top=tk.Tk()
top.title('九宫格图片生成器')
labelcTof=tk.Label(top,text="请输入要进行转换的图片路径:",height=4,\
 width=40,fg="blue") 
labelcTof.pack()
entryCd=tk.Entry(top,text='0') # 文本框,获取图片路径
entryCd.pack()
label_tip=tk.Label(top,text="请检查图片路径是否输入正确!",height=2,\
 width=40,fg="gray") 
label_tip.pack()
btnCal=tk.Button(top,text="点击生成九宫格图片",fg="red",bg="yellow",command=cTofClicked) # 点击回调函数
btnCal.pack()
 
top.mainloop() # 执行主循环

打包好的exe程序下载地址:python实现图片九宫格分割

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python Crypto模块的安装与使用方法
Dec 21 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
Sanic框架流式传输操作示例
Jul 18 Python
Selenium元素的常用操作方法分析
Aug 10 Python
Django和Flask框架优缺点对比
Oct 24 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
Python基础之条件语句详解
Jun 16 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 Python
Golang Web 框架Iris安装部署
Aug 14 Python
django最快程序开发流程详解
Jul 19 #Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 #Python
Django REST framework 视图和路由详解
Jul 19 #Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 #Python
Django模板Templates使用方法详解
Jul 19 #Python
python GUI图形化编程wxpython的使用
Jul 19 #Python
Django 外键的使用方法详解
Jul 19 #Python
You might like
PHP&MYSQL服务器配置说明
2006/10/09 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
PHP常用技巧汇总
2016/03/04 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
python获取url的返回信息方法
2018/12/17 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
python包的导入方式总结
2021/03/02 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
生产管理的三大手法
2013/11/11 职场文书
旅游个人求职信范文
2014/01/30 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
摄影展策划方案
2014/06/02 职场文书
股东合作协议书
2014/09/12 职场文书
小学生作文批改评语
2014/12/25 职场文书
教师求职自荐信范文
2015/03/04 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript