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 27 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
python定时器(Timer)用法简单实例
Jun 04 Python
Python lambda函数基本用法实例分析
Mar 16 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
Python中os模块功能与用法详解
Feb 26 Python
Python爬虫requests库多种用法实例
May 28 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
Django cookie和session的应用场景及如何使用
Apr 29 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
jquery中获取id值方法小结
2013/09/22 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
python 正则式 概述及常用字符
2009/05/07 Python
python中去空格函数的用法
2014/08/21 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
Python原始套接字编程实例解析
2020/01/29 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
世界上最好的足球商店:Unisport
2019/03/02 全球购物
施工单位工程部经理岗位职责
2015/04/09 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript