python实现图片九宫格分割的示例


Posted in Python onApril 25, 2021

简介

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

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

实现原理

实现原理非常简单,那就是利用PIL库对原图不断画小区域然后切下来存储成新的小图片。

假设每一个格子的宽和高分别是w、h,那么第row行(从0开始计数),第col列(从0开始计数)的格子左上角坐标和右下角坐标分别是(col * w, row * h),(col * w + w, r * h + h)。

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() # 执行主循环

运行结果

界面图像

python实现图片九宫格分割的示例

在文本框中输入图片地址,点击“点击生成九宫格图片”

python实现图片九宫格分割的示例

以上就是python实现图片九宫格分割的示例的详细内容,更多关于python 图片九宫格分割的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python线程池的实现实例
Nov 18 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
Python Requests安装与简单运用
Apr 07 Python
Python批量修改文本文件内容的方法
Apr 29 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
教你学会使用Python正则表达式
Sep 07 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
python调用摄像头拍摄数据集
Jun 01 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 #Python
浅谈Python项目的服务器部署
Apr 25 #Python
Python Socket编程详解
Apr 25 #Python
Python Django 后台管理之后台模型属性详解
如何用python反转图片,视频
python基于tkinter制作m3u8视频下载工具
用python自动生成日历
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python中endswith()函数的基本使用
2015/04/07 Python
用Python实现一个简单的线程池
2015/04/07 Python
python计算一个序列的平均值的方法
2015/07/11 Python
Python实现带百分比的进度条
2016/06/28 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
python输出决策树图形的例子
2019/08/09 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
英文自荐信
2013/12/15 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
员工自我评价范文
2015/03/11 职场文书
经营目标责任书
2015/05/08 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
Nginx反向代理配置的全过程记录
2021/06/22 Servers
mysql 获取相邻数据项
2022/05/11 MySQL
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android