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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
深入理解Python中装饰器的用法
Jun 28 Python
python如何压缩新文件到已有ZIP文件
Mar 14 Python
python:接口间数据传递与调用方法
Dec 17 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
Python常见数据类型转换操作示例
May 08 Python
python3实现高效的端口扫描
Aug 31 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
python属于解释型语言么
Jun 15 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 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者的疑难问答(1)
2006/10/09 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
php实现的递归提成方案实例
2015/11/14 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
javascript 有趣而诡异的数组
2009/04/06 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
python读取注册表中值的方法
2013/04/08 Python
django框架如何集成celery进行开发
2017/05/24 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
房产买卖委托公证书
2014/04/04 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
Oracle锁表解决方法的详细记录
2022/06/05 Oracle