Python利用pillow判断图片完整

发布时间:2019-09-01 09:52:31编辑:auto阅读(1638)

    1、安装第三方库。

    pip install pillow

    2、函数示例。

    #encoding: utf-8
    #author: walker
    #date: 2016-07-26
    #summary: 判断图片的有效性
     
    import io
    import imghdr
    from os import PathLike 
    from PIL import Image   
     
      
    #判断文件是否为有效(完整)的图片
    #输入参数为文件路径,或文件对象
    def IsValidImage(file): 
        bValid = True
        if isinstance(file, (str, PathLike)):
            fileObj = open(file, 'rb')
        else:
            fileObj = file
        
        buf = fileObj.read()
        if buf[6:10] in (b'JFIF', b'Exif'):     #jpg图片
            if not buf.rstrip(b'\0\r\n').endswith(b'\xff\xd9'):
                bValid = False
        else:        
            try:  
                Image.open(fileObj).verify() 
            except:  
                bValid = False
             
        return bValid
         
         
    #判断文件是否为有效(完整)的图片
    #输入参数为bytes,如网络请求返回的二进制数据
    def IsValidImage4Bytes(buf): 
        bValid = True
        try:  
            Image.open(io.BytesIO(buf)).verify() 
        except:  
            bValid = False
             
        return bValid
        
        
    #判断文件是否为有效(完整)的图片
    #输入参数为bytes,如网络请求返回的二进制数据
    def IsValidImage4Bytes(buf): 
        bValid = True
        if buf[6:10] in (b'JFIF', b'Exif'):     #jpg图片
            if not buf.rstrip(b'\0\r\n').endswith(b'\xff\xd9'):
                bValid = False
        else:        
            try:  
                Image.open(io.BytesIO(buf)).verify() 
            except:  
                bValid = False
             
        return bValid

    3、转图片格式为jpg。

    # 处理一张图片
    # 正常返回 True;异常返回 False
    def Img2Jpg(srcFile, dstFile):
    	print('Img2Jpg %s ...' % srcFile)
    
    	exMsg = ''	
    	try:
    		srcImg = Image.open(srcFile)
    		dstImg = srcImg.resize((108, 150), Image.ANTIALIAS).convert('RGB')
    		dstImg.save(dstFile, 'JPEG')
    	except:
    		exMsg = '* %s' % traceback.format_exc()
    		print(exMsg)
    	if exMsg:
    		return False
    	
    	return True
    	
    # 网络版(bytes)
    # 处理一张图片
    # 正常返回 True;异常返回 False
    def Img2Jpg(buf, dstFile):
    	print('Img2Jpg %s ...' % srcFile)
    
    	exMsg = ''	
    	try:
    		srcImg = Image.open(io.BytesIO(buf))
    		dstImg = srcImg.resize((108, 150), Image.ANTIALIAS).convert('RGB')
    		dstImg.save(dstFile, 'JPEG')
    	except:
    		exMsg = '* %s' % traceback.format_exc()
    		print(exMsg)
    	if exMsg:
    		return False
    	
    	return True	


    相关阅读:

    1、Image.verify

    2、Open PIL image from byte file

    3、如何判断JPG文件下载完整了?

    4、Pillow生成gif文件大小问题:Gif image size problem

    5、Pillow中的 GIF87a or GIF89a

    6、Pillow中文文档


    *** walker ***


关键字