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程序中使用Cookie的教程
Apr 30 Python
Python yield 使用方法浅析
May 20 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
深入了解Python在HDA中的应用
Sep 05 Python
查看keras各种网络结构各层的名字方式
Jun 11 Python
Python实现验证码识别
Jun 15 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
如何在Python中创建二叉树
Mar 30 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
收集的PHP中与数组相关的函数
2007/03/22 PHP
PHP中ADODB类详解
2008/03/25 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
浅谈Python中的数据类型
2015/05/05 Python
python实现中文转换url编码的方法
2016/06/14 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Python生成器常见问题及解决方案
2020/03/21 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
介绍一下MD5加密算法
2016/11/12 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
岗位职责的构建方法
2014/02/01 职场文书
付款委托书范本
2014/04/04 职场文书
门面房租房协议书
2014/08/20 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
2015年安全月活动总结
2015/03/26 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS