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数组的处理代码
Jan 04 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
python正则表达式之作业计算器
Mar 18 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
神经网络相关之基础概念的讲解
Dec 29 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
python如何删除文件、目录
Jun 23 Python
教你怎么用python实现字符串转日期
May 24 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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
关于页面优化和伪静态
2009/10/11 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
7个JS基础知识总结
2014/03/05 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
js面向对象的写法
2016/02/19 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
小程序实现单选多选功能
2018/11/04 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
详解vue 组件
2020/06/11 Javascript
对Python中range()函数和list的比较
2018/04/19 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
为什么是 Python -m
2020/06/19 Python
python跨文件使用全局变量的实现
2020/11/17 Python
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
高级护理专业大学生求职信
2013/10/24 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
篮球比赛口号
2014/06/10 职场文书
2019个人半年工作总结
2019/06/21 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技