python | 使用PIL压缩图片并使用字节流输出
因为自己服务器上的博客流量比较小,所以加了这个用来压缩图片,不改变图片大小,将图像质量降低。
直接丢代码了:
import os
from io import BytesIO
from PIL import Image
# 压缩图片函数,减轻网络压力
def compress_image(infile, mb=500, step=10, quality=80):
"""不改变图片尺寸压缩到指定大小
:param infile: 压缩源文件
:param mb: 压缩目标,KB
:param step: 每次调整的压缩比率
:param quality: 初始压缩比率
:return: 压缩文件字节流
"""
o_size = os.path.getsize(infile) / 1024
# print(f' > 原始大小:{o_size}')
if o_size <= mb:
with open(infile, 'rb') as f:
content = f.read()
return content # 大小满足要求,直接返回字节流
im = Image.open(infile)
im = im.convert("RGB") # 兼容处理png和jpg
while o_size > mb:
out = BytesIO()
im.save(out, format="JPEG", quality=quality)
if quality - step < 0:
break
_imgbytes = out.getvalue()
o_size = len(_imgbytes) / 1024
out.close() # 销毁对象
# print(f' > 压缩至大小:{o_size} quality: {quality}')
quality -= step # 质量递减
return _imgbytes
标签:PIL,字节,python,压缩,param,out,quality,size
From: https://www.cnblogs.com/Mz1-rc/p/17149155.html