Python生成九宫格图片的示例代码


Posted in Python onApril 14, 2021

一、前言

大家在朋友圈应该看到过用一张图片以九宫格的方式显示,效果大致如下:

Python生成九宫格图片的示例代码

要实现上面的效果非常简单,我们只需要截取图片的九个区域即可。今天我们就要带大家使用Python来实现一下九宫格图片的生成。在开始之前,我们需要安装一下Pillow模块,语句如下:

pip install pillow

下面我们先来看看一些简单的图片操作。

二、图片基本操作

今天我们会使用到三个操作,分别是读取图片、保存图片和截取图片。下面我们分别来看看。

2.1 读取图片

在Pillow中,我们最常用的就是Image子模块。其中读取图片的操作就是通过Image.open函数来实现。Image.open函数会返回一个图片对象,我们来看看具体的代码:

from PIL import Image
# 读取图片
img = Image.open('lbxx.jpg')

Pillow模块是PIL模块的python3版本,因此我们导入模块时是使用下面语句:

from PIL import Image

后面我们就可以通过操作img对象来实现对图片的操作。

2.2 截取图片

在Image对象中,有一个crop方法,可以用于剪切图片。它接收一个box参数,表示要截取的区域。参数是一个元组,元素内容分别是左上角x,y坐标,右下角x,y坐标。图片中的坐标系是以左上角为原点的,如图:

Python生成九宫格图片的示例代码

假如我们需要截取图片如下区域:

Python生成九宫格图片的示例代码

那我们的参数应该如下:

img.crop((x1, y1, x2, y2))

我们来看看具体的代码:

from PIL import Image
# 读取图片
img = Image.open('lbxx.jpg')
# 截取图片的(0, 0, 300, 300)区域
box = img.crop((0, 0, 300, 300))
# 显示截取的区域
box.show()

2.3 保存图片

保存图片的操作非常简单,我们只需要调用img的save方法即可,我们直接看代码:

from PIL import Image
img = Image.open('lbxx.jpg')
box = img.crop((0, 0, 300, 300))
# 保存图片
box.save('1.jpg')

我们直接调用save方法,传入保存的路径即可。

三、生成九宫格图片

知道了上面的操作,下面的操作无非就是截取图片的九个区域,然后保存即可。具体代码如下:

from PIL import Image
# 读取图片
im = Image.open('lbxx.jpg ')

# 宽高各除 3,获取裁剪后的单张图片大小
width = im.size[0]//3
height = im.size[1]//3

# 裁剪图片的左上角坐标
start_x = 0
start_y = 0

# 用于给图片命名
im_name = 1

# 循环裁剪图片
for i in range(3):
    for j in range(3):
        # 裁剪图片并保存
        crop = im.crop((start_x, start_y, start_x+width, start_y+height))
        crop.save('imgs/' + str(im_name) + '.jpg')

        # 将左上角坐标的 x 轴向右移动
        start_x += width
        im_name += 1

    # 当第一行裁剪完后 x 继续从 0 开始裁剪
    start_x = 0
    # 裁剪第二行
    start_y += height

我们先创建一个imgs目录,然后运行程序就可以在imgs下看到截取好的图片。

Python生成九宫格图片的示例代码

不过上面的代码还有些不便之处,就是我们需要手动创建imgs目录。我们可以借助os模块来帮我们自动创建改目录,修改后的代码如下:

import os
from PIL import Image
# 读取图片
im = Image.open('1kkx.jpg')

# 宽高各除 3,获取裁剪后的单张图片大小
width = im.size[0]//3
height = im.size[1]//3

# 裁剪图片的左上角坐标
start_x = 0
start_y = 0

# 用于给图片命名
im_name = 1

# 循环裁剪图片
for i in range(3):
    for j in range(3):
        # 裁剪图片并保存
        crop = im.crop((start_x, start_y, start_x+width, start_y+height))
        # 判断文件夹是否存在
        if not os.path.exists('imgs'):
            os.mkdir('imgs')
        crop.save('imgs/' + str(im_name) + '.jpg')

        # 将左上角坐标的 x 轴向右移动
        start_x += width
        im_name += 1

    # 当第一行裁剪完后 x 继续从 0 开始裁剪
    start_x = 0
    # 裁剪第二行
    start_y += height

我们进行了一个简单的判断,如何再决定要不要创建文件夹。最终效果是一样的。

到此这篇关于Python生成九宫格图片的示例代码的文章就介绍到这了,更多相关Python生成九宫格图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的CURL PycURL使用例子
Jun 01 Python
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
Python查询IP地址归属完整代码
Jun 21 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Python 实现域名解析为ip的方法
Feb 14 Python
selenium处理元素定位点击无效问题
Jun 12 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
python适合做数据挖掘吗
Jun 16 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
Python实现石头剪刀布游戏
Jan 20 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
在PWS上安装PHP4.0正式版
2006/10/09 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
php无限遍历目录示例
2014/02/21 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
关于赌博的检讨书
2014/01/24 职场文书
庆元旦广播稿
2014/02/10 职场文书
工商管理专业自荐信
2014/06/03 职场文书
婚庆答谢词大全
2015/09/29 职场文书
家访教师心得体会
2016/01/23 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
Python实现视频中添加音频工具详解
2021/12/06 Python