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下函数参数的传递(参数带星号的说明)
Sep 19 Python
Python中模块与包有相同名字的处理方法
May 05 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
基于opencv实现简单画板功能
Aug 02 Python
区分python中的进程与线程
Aug 13 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
Django正则URL匹配实现流程解析
Nov 13 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 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开发中四种查询返回结果分析
2011/01/02 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python随机数分布random测试
2018/08/27 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python异常处理机制结构实例解析
2020/07/23 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
给老婆的搞笑检讨书
2014/01/12 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
颐和园的导游词
2015/01/30 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
商业计划书之服装
2019/09/09 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
python 远程执行命令的详细代码
2022/02/15 Python