测试中对图片有的地方对大小有要求,有的需要裁剪边缘,花了一点时间做了个图片的批量裁剪,同时也学习了python对文件的简单操作
#coding=utf-8
#
# 测试需要,裁剪图片,使用之前学过的技术
# 做一个裁剪的小案例
import os
#读取path路径下的 jpg文件
def getAllImages(path):
#f.endswith() 限制文件类型
#f.endswith('.jpg')|f.endswith('.png') 改成这句可以读取jpg/png格式的文件
#注意 返回的是绝对路径
return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]
import pylab as plb
import PIL.Image as Image
#循环读图
for path in getAllImages(r'D:\\test'):
#读图
img = Image.open(path)
#显示
plb.imshow(img)
#设置裁剪点(4个)
corner = plb.ginput(4)
#顺时针取点求解
left = (corner[0][0] + corner[3][0])/2
top = (corner[1][1] + corner[0][1])/2
reight = (corner[1][0] + corner[2][0])/2
under = (corner[3][1] + corner[2][1])/2
#print left,top,reight,under
#box = [left,top,reight,under]
#box中的数必须是 int 否则会报错
box = [int(left),int(top),int(reight),int(under)]
#裁剪
img2 = img.crop(box)
#显示裁剪后的效果
#plb.imshow(img2)
#plb.show()
#储存为原来路径覆盖原文件
img2.save(path)
plb.show()
注意:
1.box中是 int 型 ,不是整形会报错
2.裁剪选点需要顺时针选点,当然也可根据需要自行修改源码
3.f.endswith(‘.jpg’)|f.endswith(‘.png’) 可以读取jpg/png格式的文件
4.getAllImages(path)返回类型为绝对路径