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中实现switch功能实例解析
Jan 11 Python
python实现按长宽比缩放图片
Jun 07 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
python实现批量注册网站用户的示例
Feb 22 Python
python 搜索大文件的实例代码
Jul 08 Python
在python中做正态性检验示例
Dec 09 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python在字符串中处理html和xml的方法
Jul 31 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
几款Python编译器比较与推荐(小结)
Oct 15 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将access数据库转换到mysql数据库的方法
2014/12/24 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
有趣的python小程序分享
2017/12/05 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python编程argparse入门浅析
2018/02/07 Python
python自动化生成IOS的图标
2018/11/13 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
python异常处理和日志处理方式
2019/12/24 Python
python如何删除列为空的行
2020/07/17 Python
python中sys模块是做什么用的
2020/08/16 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
怎样拟定创业计划书
2014/05/01 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
购房协议书范本
2014/10/02 职场文书
小学班主任个人总结
2015/03/03 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
正则表达式基础与常用验证表达式
2022/06/16 Javascript