用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 相关文章推荐
python算法表示概念扫盲教程
Apr 13 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
python K近邻算法的kd树实现
Sep 06 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
django 控制页面跳转的例子
Aug 06 Python
python 数据提取及拆分的实现代码
Aug 26 Python
Python numpy数组转置与轴变换
Nov 15 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
Java byte数组操纵方式代码实例解析
Jul 22 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php框架Phpbean说明
2008/01/10 PHP
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
js控制CSS样式属性语法对照表
2012/12/11 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python super()函数使用及多重继承
2020/05/06 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
校长先进事迹材料
2014/02/01 职场文书
2014年元旦活动方案
2014/02/15 职场文书
项目施工员岗位职责
2014/03/09 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
师范大学生求职信
2014/06/13 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书