用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自动化测试之连接几组测试包实例
Sep 28 Python
Python3 能振兴 Python的原因分析
Nov 28 Python
python实现的希尔排序算法实例
Jul 01 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
python 读入多行数据的实例
Apr 19 Python
Python 字符串换行的多种方式
Sep 06 Python
django+echart绘制曲线图的方法示例
Nov 26 Python
Python实现最常见加密方式详解
Jul 13 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
Python partial函数原理及用法解析
Dec 11 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
Django开发RESTful API实现增删改查(入门级)
May 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
PHP详细彻底学习Smarty
2008/03/27 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
PHP nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
理解Javascript闭包
2013/11/01 Javascript
css配合jquery美化 select
2013/11/29 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
javascript实现数独解法
2015/03/14 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
python构造IP报文实例
2020/05/05 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
村干部四风问题整改措施
2014/09/30 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
小学运动会入场词
2015/07/18 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书