python 判断图片是否损坏_Python利用pillow判断图片完整性

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

相关阅读:

*** walker ***

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值