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字符串和字典
Jul 07 Python
python入门教程之识别验证码
Mar 04 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
kali中python版本的切换方法
Jul 11 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
解决Django no such table: django_session的问题
Apr 07 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
python3处理word文档实例分析
Dec 01 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
PHP新手入门学习方法
2011/05/08 PHP
重新认识php array_merge函数
2014/08/31 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
python selenium 弹出框处理的实现
2019/02/26 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python字典key不能是可以是啥类型
2020/08/04 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
捐款倡议书范文
2014/02/02 职场文书
违纪检讨书2000字
2014/02/08 职场文书
本科应届生自荐信
2014/06/29 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
学校施工安全责任书
2015/01/29 职场文书
婚庆主持词大全
2015/06/30 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL