用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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
python实现带错误处理功能的远程文件读取方法
Apr 29 Python
利用python发送和接收邮件
Sep 27 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
Python3之手动创建迭代器的实例代码
May 22 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
Python列表解析操作实例总结
Feb 26 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
python中pow函数用法及功能说明
Dec 04 Python
Python中npy和mat文件的保存与读取
Apr 24 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
Python类属性与实例属性用法分析
2015/05/09 Python
python中__call__内置函数用法实例
2015/06/04 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
scrapy爬虫实例分享
2017/12/28 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
超市中秋节促销方案
2014/03/21 职场文书
死亡赔偿协议书
2015/01/28 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
初级职称评定工作总结
2015/08/13 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书