python | 使用PIL压缩图片并使用字节流输出
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
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/17149155.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)