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 Tkinter GUI编程入门介绍
Mar 10 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
Python脚本实时处理log文件的方法
Nov 21 Python
Django学习教程之静态文件的调用详解
May 08 Python
详解Python3的TFTP文件传输
Jun 26 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
python交易记录整合交易类详解
Jul 03 Python
python 循环数据赋值实例
Dec 02 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
pandas map(),apply(),applymap()区别解析
Feb 24 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制作新闻系统的思路
2006/10/09 PHP
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
PHP Class&Object -- 解析PHP实现二叉树
2013/06/25 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
js实现一键复制功能
2017/03/16 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
详解Django admin高级用法
2019/11/06 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
是否有自动比较结构的方法
2015/06/03 面试题
11月升旗仪式讲话稿
2014/02/15 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
七年级作文之冬景
2019/11/07 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
PHP基本语法
2021/03/31 PHP
Laravel中获取IP的真实地理位置
2021/04/01 PHP