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字符串连接的N种方式总结
Sep 17 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
python Matplotlib模块的使用
Sep 16 Python
python神经网络编程之手写数字识别
May 08 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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
调频问题解答
2021/03/01 无线电
菜鸟修复电子管记
2021/03/02 无线电
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
Javascript的比较汇总
2016/07/25 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
移动端js图片查看器
2016/11/17 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
白酒业务员岗位职责
2013/12/27 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
办公室文员自荐书
2014/02/03 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
义卖募捐活动总结
2015/05/09 职场文书
800字作文之大雪
2019/12/04 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server