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中的各种函数的使用
May 24 Python
python使用Image处理图片常用技巧分析
Jun 01 Python
Python 中的with关键字使用详解
Sep 11 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python3处理HTTP请求的实例
May 10 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
pymysql 开启调试模式的实现
Sep 24 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Python list与NumPy array 区分详解
Nov 06 Python
jupyter note 实现将数据保存为word
Apr 14 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
ajax缓存问题解决途径
2006/12/06 PHP
PHP开发过程中常用函数收藏
2009/12/14 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
解析php取整的几种方式
2013/06/25 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
Javascript的this用法
2017/01/16 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
python中使用正则表达式的连接符示例代码
2017/10/10 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
中专生职业生涯规划书范文
2013/12/29 职场文书
大学生校园创业计划书
2014/02/08 职场文书
小学生寒假家长评语
2014/04/16 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
继续教育个人总结
2015/03/03 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
中秋节主题班会
2015/08/14 职场文书