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实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
python非递归全排列实现方法
Apr 10 Python
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 Python
python中reduce()函数的使用方法示例
Sep 29 Python
Python探索之自定义实现线程池
Oct 27 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
利用python将图片版PDF转文字版PDF
May 03 Python
Python基础知识点 初识Python.md
May 14 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 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
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php目录操作实例代码
2014/02/21 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
php unlink()函数使用教程
2018/07/12 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
python刷投票的脚本实现代码
2014/11/08 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
几个Shell Script面试题
2014/04/18 面试题
承诺书的格式范文
2014/03/28 职场文书
大学迎新标语
2014/06/26 职场文书
物业管理专业自荐信
2014/07/01 职场文书
工资收入证明
2014/10/07 职场文书
2014年班干部工作总结
2014/11/25 职场文书
入党函调证明材料
2015/06/19 职场文书