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开发常用的一些开源Package分享
Feb 14 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
超级实用的8个Python列表技巧
Aug 24 Python
python APScheduler执行定时任务介绍
Apr 19 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获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
CI框架表单验证实例详解
2016/11/21 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
第一个Vue插件从封装到发布
2017/11/22 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
Python实现统计文本文件字数的方法
2017/05/05 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
linux面试相关问题
2013/04/28 面试题
Java软件工程师综合面试题笔试题
2013/09/08 面试题
信息技术专业个人自我评价
2013/12/11 职场文书
社区包粽子活动方案
2014/01/21 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
课例研修方案
2014/05/31 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
html实现弹窗的实例
2021/06/09 HTML / CSS
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫