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操作SQLite简明教程
Jul 10 Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python的迭代器和生成器
Jul 29 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
python网络应用开发知识点浅析
May 28 Python
Python求解正态分布置信区间教程
Nov 20 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
详解python中的lambda与sorted函数
Sep 04 Python
解决python3中os.popen()出错的问题
Nov 19 Python
Jupyter Notebook 安装配置与使用详解
Jan 06 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之数据库操作详解及乱码解决!
2007/01/02 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
详解Python中的多线程编程
2015/04/09 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python算法应用实战之队列详解
2017/02/04 Python
python基础练习之几个简单的游戏
2017/11/10 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
python 日期操作类代码
2018/05/05 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
成龙洗发水广告词
2014/03/14 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
忠诚教育心得体会
2014/09/03 职场文书
同学联谊会邀请函
2019/06/24 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL
Python保存并浏览用户的历史记录
2022/04/29 Python