python使用PIL剪切和拼接图片
作者:G_scsd 发布时间:2022-06-26 07:41:55
标签:python,剪切,拼接
本文实例为大家分享了python使用PIL剪切图片和拼接图片的具体代码,供大家参考,具体内容如下
因工作需要,接触到了PIL这个包,看其他人的博客踩了一些坑,有些博客并没有注明各个位置参数的含义,今天我就将他补全
切图
1.首先先下载一张图片,我使用的是1200*1200像素的图片,将它放置在G盘的img目录下
2. 我将这张图片切成四等分,我新建了两个文件,分别是img1、img2,用来存放图片
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
看下运行结果:
看下文件,这样就将这张图片切分后存到img1这个目录中去了
点开目录看下,是我们要的效果
二、拼接
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()
看下打印结果:
看下目录:看到img2中存储了图片
进入该目录:可以看到拼接成功了
本文已被收录到专题《python图片处理操作》 ,欢迎大家点击学习更多精彩内容。
来源:https://blog.csdn.net/Gscsd_T/article/details/83216218
0
投稿
猜你喜欢
- 前言thinkphp3.1.2 需要使用cli方法运行脚本折腾了一天才搞定3.1.2的版本真的很古老解决增加cli.php入口文件defin
- 我就废话不多说了,大家还是直接看代码吧~#aaa.py#version 3.5import os #这句是没用了,不知道为什么markdow
- 网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出
- 在正文前,先简短介绍自己。我任职于广州的某个网站服务公司的系统开发员,主要任务是以.Net编写各种web系统,例如CMS.EIP。大家都知道
- 四、XML应用分类 总的说来的XML的应用可分为四类: (1)应用于客户需要与不同的数据源进行交互时。数据可能来自不同的数据库,他们都有各自
- # os 模块os.sep 可以取代操作系统特定的路径分隔符。windows下为 '\\'os.name 
- jquery作为一款高质量的框架被大多web开发者所推崇。jquery也的确是一款伟大的产品,在实际开发中明显提高了效率。但是任何产品并不是
- 在Python中,语法错误可以被Python解释器发现,但逻辑上错误或变量使用错误却不容易发现,如果结果没有符合预期,则需要调试,一个很好的
- requests是常用的请求库,不管是写爬虫脚本,还是测试接口返回数据等。都是很简单常用的工具。这里就记录一下如何用requests发送js
- 一、采用?a=1&b=2访问修改views.py:views.pyfrom django.shortcuts import rend
- 受<! #include file="filename.asp" --> 宏限制必须存在该文件并且会预先编译
- 拆包是指将一个结构中的数据拆分为多个单独变量中。以元组为例:>>> a = ('windows', 10,
- 除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类。因为Python中的sklearn库
- 本文实例讲述了Python使用dict.fromkeys()快速生成一个字典。分享给大家供大家参考,具体如下:>>> re
- 介绍:pyenv-virtualenv是pyenv的一个插件,作用如同virtualenv一样,是用来管理虚拟环境的,配合pyenv主体使用
- 因为要批量用某软件处理一批eps文件,所以要模拟鼠标及键盘动作,使其能够自动化操作。#-*-coding:utf-8-*-import os
- 今天先聊一聊在windows/mac iOS系统下用venv搭建python轻量级虚拟环境的问题。使用venv搭建的虚拟环境同virtual
- 目录正文开始1. DRF 中的限流2. 限流进阶配置3. 限流思路分析4. 源码分析5. 其它注意事项参考资料正文开始先说一个限流这个概念,
- 一、设计目的1、教学目的本课程设计是学生学习完《Python程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用Pyth
- 日期和时间类型MySQL有多个表示各种日期和时间值的数据类型, 比如YEAR和DATE. MySQL存储时间的最精确粒度是秒。 然而, 能做