随笔- 310  文章- 1  评论- 0  阅读- 85921 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
'''
pip install pillow
'''
from io import BytesIO
 
from PIL import Image
 
 
def pic_compress(pic_path, out_path, target_size, quality=90, step=5):
    # 读取图片bytes
    with open(pic_path, 'rb') as f:
        pic_byte = f.read()
 
    current_size = len(pic_byte) / 1024  # 图片当前质量大小
    print("图片压缩前的大小为(KB):", current_size)
    while current_size > target_size:  # 当达到目标压缩大小后退出循环
        img = Image.open(BytesIO(pic_byte))
        buf = BytesIO()
        img.save(buf, format=img.format, quality=quality)
        pic_byte = buf.getvalue()
        if quality - step < 0# 以降低到最小质量
            break
        quality -= step
        current_size = len(pic_byte) / 1024
 
    # 保存图片
    with open(out_path, 'wb') as f:
        f.write(pic_byte)
 
    return len(pic_byte) / 1024
 
 
def main():
    pic_size = pic_compress('zy.jpg', 'new_zy.jpg', target_size=100)
    print("图片压缩后的大小为(KB):", pic_size)
 
if __name__ == '__main__':
    main()

  

 posted on   boye169  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示