import os
from PIL import Image
# 输入绝对路径,调用此方法即可(压缩后的图片会覆盖原先图片)
def tocompress(infile):
rname = ''
try:
filename = compress_image(infile)[0]
rname = os.path.basename(filename)
except Exception as e:
print('图片压缩异常', e)
return rname
# 获取输出图片文件
def get_outfile(infile, outfile):
if outfile:
return outfile
dir, suffix = os.path.splitext(infile)
return dir + suffix
# 获取图片文件大小
def get_size(file):
# 获取文件大小:KB
size = os.path.getsize(file)
return size / 1024
# 调用该函数进行压缩
def compress_image(infile, outfile='', mb=50, step=10, quality=80):
"""不改变图片尺寸压缩到指定大小
:param infile: 压缩源文件
:param outfile: 压缩文件保存地址
:param mb: 压缩目标,KB
:param step: 每次调整的压缩比率
:param quality: 初始压缩比率
:return: 压缩文件地址,压缩文件大小
"""
o_size = get_size(infile)
if o_size <= mb:
# im = Image.open(infile)
# x, y = im.size
# y_s = int(y * 600 / x)
# im = im.resize((600, y_s), Image.ANTIALIAS)
# outfile = get_outfile(infile, outfile)
# im.save(outfile, quality=quality)
return infile, o_size
outfile = get_outfile(infile, outfile)
while o_size > mb:
im = Image.open(infile)
try:
if im.mode == 'P':
im = im.convert('RGB')
except Exception as e:
pass
x, y = im.size
y_s = int(y * 600 / x)
im = im.resize((600, y_s), Image.ANTIALIAS)
im.save(outfile, quality=quality)
if quality - step < 0:
break
quality -= step
o_size = get_size(outfile)
return outfile, o_size
python 图像压缩处理
最新推荐文章于 2024-05-07 03:27:42 发布