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 相关文章推荐
Windows下安装python2.7及科学计算套装
Mar 05 Python
详解Python中的__new__()方法的使用
Apr 09 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
基于Python os模块常用命令介绍
Nov 03 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
python的常见矩阵运算(小结)
Aug 07 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
python实现三壶谜题的示例详解
Nov 02 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
php 时间计算问题小结
2009/01/04 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
前端必学之PHP语法基础
2016/01/01 PHP
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
Python的mysql数据库的更新如何实现
2017/07/31 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python错误处理操作示例
2018/07/18 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
公司道歉信范文
2014/01/09 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
龙猫观后感
2015/06/09 职场文书
红白喜事主持词
2015/07/06 职场文书
升学宴学生致辞
2015/07/27 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
python​格式化字符串
2022/04/20 Python