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检测远程端口是否打开的方法
Mar 14 Python
深入解析Python中的线程同步方法
Jun 14 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
Python 20行简单实现有道在线翻译的详解
May 15 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
公认8个效率最高的爬虫框架
Jul 28 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
深入理解PHP原理之异常机制
2010/08/21 PHP
ThinkPHP控制器详解
2015/07/27 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP中的self关键字详解
2019/06/23 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
php输出形式实例整理
2020/05/05 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
深入理解node.js http模块
2018/01/24 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
Python中类的继承代码实例
2014/10/28 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
Python3 assert断言实现原理解析
2020/03/02 Python
pandas按条件筛选数据的实现
2021/02/20 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
优秀员工自荐书
2013/12/19 职场文书
老公给老婆的保证书
2014/04/28 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
感恩教育观后感
2015/06/17 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL