用Python实现将一张图片分成9宫格的示例


Posted in Python onJuly 05, 2019

经常看到朋友圈或者空间里有朋友发布照片时,将朋友圈的照片切分为九宫格,参考了一些大神的博客资料,现整理如下;

将图片分拆成九宫格的思路:

读取图片->填充图片为正方形(fill_image函数)->将图片切分为9张(cut_image函数)->保存图片(save_image)->over

代码实现如下:

from PIL import Image
import sys
#将图片填充为正方形
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)
  box_list = []
  # (left, upper, right, lower)
  for i in range(0,3):#两重循环,生成9张图片基于原图的位置
    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) + '.jpg')
    index += 1
 
if __name__ == '__main__':
  file_path = "微信图片_20180809234441.jpg"
  image = Image.open(file_path)
  # image.show()
  image = fill_image(image)
  image_list = cut_image(image)
  save_images(image_list)

效果如下:

用Python实现将一张图片分成9宫格的示例

参考了二胖大神提供的思路,里面的逻辑很有趣:

1.开始相当于是拿一张白底的图片粘贴到了原图上;

2.切图的时候分成9宫格,的循环写的也非常漂亮。

3.代码中出现了很多次for循环的迭代使用:[image.crop(box) for box in box_list],以后自己也要多练习这种写法。

以上这篇用Python实现将一张图片分成9宫格的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
Python模块的加载讲解
Jan 15 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
python sqlite的Row对象操作示例
Sep 11 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 Python
Python3 assert断言实现原理解析
Mar 02 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python获取txt文件词向量过程详解
Jul 05 #Python
Python 的字典(Dict)是如何存储的
Jul 05 #Python
关于Python 的简单栅格图像边界提取方法
Jul 05 #Python
Python3+Appium安装使用教程
Jul 05 #Python
Python叠加两幅栅格图像的实现方法
Jul 05 #Python
用vue.js组件模拟v-model指令实例方法
Jul 05 #Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 #Python
You might like
PHP开发文件系统实例讲解
2006/10/09 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
js查找节点的方法小结
2015/01/13 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
学习vue.js计算属性
2016/12/03 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python生成器(Generator)详解
2015/04/13 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
python excel转换csv代码实例
2019/08/26 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
批评与自我批评材料
2014/02/15 职场文书
机关党员公开承诺书
2014/08/30 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis