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 list 合并连接字符串的方法
Mar 09 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
AI人工智能 Python实现人机对话
Nov 13 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
python实现文件的分割与合并
Aug 29 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
python爬虫 requests-html的使用
Nov 30 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
You might like
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php计算整个目录大小的方法
2015/06/01 PHP
ThinkPHP模型详解
2015/07/27 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
Vuex新手的理解与使用详解
2019/05/31 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
python列表去重的二种方法
2014/02/14 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Python适配器模式代码实现解析
2019/08/02 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
django使用graphql的实例
2020/09/02 Python
如何理解transaction事务的概念
2015/05/27 面试题
幼师专业求职推荐信
2013/11/08 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
班级学习计划书
2014/04/27 职场文书
健康状况证明模板
2014/10/23 职场文书
2014年人大工作总结
2014/12/10 职场文书
护士年终考核评语
2014/12/31 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB