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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
Linux下Python获取IP地址的代码
Nov 30 Python
用Python写一个无界面的2048小游戏
May 24 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
python判断数字是否是超级素数幂
Sep 27 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
pytorch 共享参数的示例
Aug 17 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
Javascript 布尔型分析
2008/12/22 Javascript
Jquery插件写法笔记整理
2012/09/06 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python中的字符串替换操作示例
2016/06/27 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
如何基于Python实现数字类型转换
2020/02/07 Python
后勤园长自我鉴定
2013/10/17 职场文书
代理人委托书
2014/09/16 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
消防演习感想
2015/08/10 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis