python使用PIL剪切和拼接图片


Posted in Python onMarch 23, 2020

本文实例为大家分享了python使用PIL剪切图片和拼接图片的具体代码,供大家参考,具体内容如下

因工作需要,接触到了PIL这个包,看其他人的博客踩了一些坑,有些博客并没有注明各个位置参数的含义,今天我就将他补全

切图

1.首先先下载一张图片,我使用的是1200*1200像素的图片,将它放置在G盘的img目录下

python使用PIL剪切和拼接图片

2.  我将这张图片切成四等分,我新建了两个文件,分别是img1、img2,用来存放图片

python使用PIL剪切和拼接图片

3. 代码

from PIL import Image
img = Image.open('G:/img/1.jpg')
print('图片的大小为: {}'.format(img.size))
print('将图片切分成等四份,4张 600 X 600 的图片')
size = 600 #图片大小都为600,所以只设置一个变量
left = 0 #图片距离左边的宽度乘积值
shang = 0 #图片距离上边的宽度乘积值
index = 0 #图片名
for i in range(4):
 if i == 2:
 # 当循环到第三个值时,需要切第二行的图片
 shang += 1
 left = 0
 a = size * left # 图片距离左边的大小
 b = size * shang # 图片距离上边的大小
 c = size * (left + 1) # 图片距离左边的大小 + 图片自身宽度
 d = size * (shang + 1) # 图片距离上边的大小 + 图片自身高度
 print('a= {},b= {},c= {}, d= {}'.format(a,b,c,d))
 croping = img.crop((a,b,c,d))
 croping.save('G:/img/img1/'+ str(index) + '.jpg')
 index += 1
 left += 1

看下运行结果:

python使用PIL剪切和拼接图片

看下文件,这样就将这张图片切分后存到img1这个目录中去了

python使用PIL剪切和拼接图片

点开目录看下,是我们要的效果

python使用PIL剪切和拼接图片

二、拼接

1.在切分后的图片基础上拼接,将图片存入img2这个文件夹中去

代码:

from PIL import Image
 
imgname = 0
def pingjie(imgs):
 print('------------pingjie-------------')
 target = Image.new('RGB', (size * 2, size * 1)) #拼接前需要写拼接完成后的图片大小 1200*600
 for i in range(len(imgs)):
 a = size * i  # 图片距离左边的大小
 b = 0  # 图片距离上边的大小
 c = size * (i + 1) # 图片距离左边的大小 + 图片自身宽度
 d = size  # 图片距离上边的大小 + 图片自身高度
 target.paste(imgs[i], (a, b, c, d))
 global imgname
 print('拼接图片的路径为:',path1 + str(imgname) + '.jpg')
 target.save(path1 + str(imgname) + '.jpg')
 imgname += 1
 
def pj():
 print('------------pj-------------')
 #取1,3是因为每行拼接完整都是最后那个,第一行是0,1命名,第二行是2,3命名,所以取后面那个值
 imglist = [1,3]
 img = []
 for i in imglist:
 print('完整行的拼接路径为:'+ path1 + str(i) + '.jpg')
 img.append(Image.open(path1 + str(i) + '.jpg'))
 target = Image.new('RGB', (size * 2, size * 2)) #拼接前需要写拼接完成后的图片大小 1200*1200
 for i in range(len(img)):
 a = 0 # 图片距离左边的大小
 b = size * i # 图片距离上边的大小
 c = size * 2 # 图片距离左边的大小 + 图片自身宽度
 d = size * (i + 1) # 图片距离上边的大小 + 图片自身高度
 target.paste(img[i], (a, b, c, d))
 global imgname
 target.save(path1 + 'pingjie' + '.jpg')
 
if __name__ == '__main__':
 size = 600 #图片的宽高都为600像素
 path = 'G:/img/img1/' # 存放要拼接图片的目录
 path1 = 'G:/img/img2/' # 拼接后图片的存放目录
 index = 0 #图片的名字
 for i in range(2): #有两行,所以需要循环两次
 images = [] #每一次拼接只能一行一行拼接,不能在第一行拼接完后再在其基础上拼接第二行的图片,矩阵不允许这样操作
 for j in range(2): #每行有两张图片,所以也要循环两次
  print(path + str(index) + '.jpg')
  images.append(Image.open(path + str(index) + '.jpg'))
  index += 1
 print('第 {} 行拼接完成'.format(i))
 pingjie(images)
 pj()

看下打印结果:

python使用PIL剪切和拼接图片

看下目录:看到img2中存储了图片

python使用PIL剪切和拼接图片

进入该目录:可以看到拼接成功了

python使用PIL剪切和拼接图片

本文已被收录到专题《python图片处理操作》 ,欢迎大家点击学习更多精彩内容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python命令行参数解析OptionParser类用法实例
Oct 09 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
Python中collections模块的基本使用教程
Dec 07 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
python函数与方法的区别总结
Jun 23 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
python多线程并发及测试框架案例
Oct 15 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
python 读取二进制 显示图片案例
Apr 24 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
python求解汉诺塔游戏
Jul 09 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 #Python
python实现单张图像拼接与批量图片拼接
Mar 23 #Python
OpenCV Python实现拼图小游戏
Mar 23 #Python
PYcharm 激活方法(推荐)
Mar 23 #Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 #Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 #Python
Python常用编译器原理及特点解析
Mar 23 #Python
You might like
php getsiteurl()函数
2009/09/05 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
如何在sublime编辑器中安装python
2020/05/20 Python
python3.7调试的实例方法
2020/07/21 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
python线程优先级队列知识点总结
2021/02/28 Python
详细的大学生创业计划书模板
2014/01/27 职场文书
四年级下册教学反思
2014/02/01 职场文书
干部考核评语
2014/04/29 职场文书
大学生求职计划书
2014/04/30 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
原告代理词范文
2015/05/25 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP