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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
python基础教程之序列详解
Aug 29 Python
python实现给字典添加条目的方法
Sep 25 Python
python入门教程之识别验证码
Mar 04 Python
python实时监控cpu小工具
Jun 21 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
python logging设置level失败的解决方法
Feb 19 Python
什么是Python变量作用域
Jun 03 Python
python drf各类组件的用法和作用
Jan 12 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
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
zookeeper python接口实例详解
2018/01/18 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python中的colorlog库使用详解
2019/07/05 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Python新手学习装饰器
2020/06/04 Python
如何用Django处理gzip数据流
2021/01/29 Python
银行个人求职自荐信范文
2013/12/16 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
双语教学实施方案
2014/03/23 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
高一军训感想
2015/08/07 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
Vue监视数据的原理详解
2022/02/24 Vue.js
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android