本篇文章小编给大家分享一下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坐标。图片中的坐标系是以左上角为原点的,如图:
假如我们需要截取图片如下区域:
那我们的参数应该如下:
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下看到截取好的图片。
不过上面的代码还有些不便之处,就是我们需要手动创建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
我们进行了一个简单的判断,如何再决定要不要创建文件夹。最终效果是一样的。
太极熊猫2百度版 安卓版v1.7.1
下载黎明觉醒应用宝版 安卓版v1.111.1
下载暗影格斗3国际版 (Shadow Fight 3)最新版v1.40.3
下载王者战魂华为版 安卓版v3.6.1
下载放置魔法学院免广告版 v2.9.5
放置魔法学院内置Mod菜单是游戏的破解版本,在该版本中为玩家
万乘之国qq版本 安卓版v1.0.5
万乘之国qq版本是一款极具魅力的策略游戏,玩家们可以通过不同
动物餐厅国际服无限内购版 v12.9
动物餐厅国际服免广告版是游戏的破解版本,在该版本中为玩家去除
欧洲卡车司机 安卓版v3.2
欧洲卡车司机是款模拟经营游戏,这款游戏的画面还是蛮逼真的,给
疯狂大酒店 (Grand Hotel Mania)最新中文版v4.10.0.20
疯狂大酒店(Grand Hotel Mania)是一款好玩的