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批量给云主机配置安全组的方法教程
Jun 21 Python
Python3.5 创建文件的简单实例
Apr 26 Python
python如何爬取个性签名
Jun 19 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
python文件选择对话框的操作方法
Jun 27 Python
Python 控制终端输出文字的实例
Jul 12 Python
python中eval与int的区别浅析
Aug 11 Python
python实现同一局域网下传输图片
Mar 20 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
python制作抽奖程序代码详解
Jan 15 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
Python基础之元组与文件知识总结
May 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验证码类
2016/09/29 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
单身旅行者的单身假期:Just You
2018/04/08 全球购物
幼教简历自我评价
2014/01/28 职场文书
师德师风个人总结
2015/02/06 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL