python处理图像文件中损坏的图片以及批量裁剪指定的图片大小

#encoding:utf-8

'''
该代码主要用来处理从网上爬虫下来的损坏图片,以及批量裁剪图片
'''

from PIL import Image

import cv2
import os



'''------------ start 检测图像文件是否损坏 ---------------- '''

def is_valid_image(path):            
    try:
        bValid=True
        fileobj=open(path,'rb')  #以二进制打开文件
        buf=fileobj.read()
        if not buf.startswith(b'\xff\xd8'):   # 是否以\xff\xd8开头 表示JPEG(jpg)
            bValid=False
        else:
            try:
                Image.open(fileobj).verify()
            except Exception as e:
                bValid=False                        
    except Exception as e:                
        return False
    return bValid



'''  -----    这里写一个调用函数:调用is_valid_image -----------'''

def is_call_valid(path):
    # 遍历图像夹下所有图像 root:根目录  dirs:根目录下所有目录(文件夹):files: 包含所有图像的一个list
    for root,dirs,files in os.walk(path):      
        for img_file in files:      
            # 组合图像的绝对路径      
            img_file_path=os.path.join(root,img_file)
            # 调用图像判断函数
            flag=is_valid_image(img_file_path)
            # 判断图像是否损坏,若是则删除
            if flag==False:
                os.remove(img_file_path)
                # print(img_file_path)
    


''' ---------  start 批量裁剪图片为指定大小 -------------'''

def cutimage(path,suffix):
    for root,dirs,files in os.walk(path):
        for file in files:
            filepath = os.path.join(root, file)
            filesuffix = os.path.splitext(filepath)[1][1:]
            # print(filesuffix)
            if filesuffix in suffix:  #遍历找到指定后缀的文件名["jpg",png]等
                image = cv2.imread(filepath) #opencv剪切图片  
                # cv2.imshow(file,image) 
                dim =(500,375)      #指定尺寸w*h
                resized =cv2.resize(image,dim,interpolation = cv2.INTER_AREA) #这里采用的插值法是INTER_LINEAR
                # cv2.imshow("resize:%s"%file,resized)
                cv2.imwrite("../cv/%s"%file,resized) #保存文件 
    cv2.waitKey(0)     #退出



suffix = ["jpeg"]

if __name__ == "__main__":

    # 图像文件夹路径  根据自己电脑修改路径
    path=r'./chinese_celeb_imgs/'  
    # 调用is_call_valid函数 删除损坏的图像文件
    is_call_valid(path)
    # 批量裁剪图片
    # cutimage(path,suffix)

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值