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 ***