用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发腾讯微博代码分享
Jan 10 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python操作redis的方法
Jul 07 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
python3 property装饰器实现原理与用法示例
May 15 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
python实现的Iou与Giou代码
Jan 18 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
python三引号如何输入
Jul 06 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教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
开启PHP的伪静态模式
2015/12/31 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
jQuery 位置插件
2008/12/25 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Python数据分析之如何利用pandas查询数据示例代码
2017/09/01 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
项目采购员岗位职责
2014/04/15 职场文书
安全施工标语
2014/06/07 职场文书
爱国口号
2014/06/19 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
2014年禁毒工作总结
2014/11/24 职场文书