首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python知识点100篇系列(10)-使用python压缩图片的两种方式

python知识点100篇系列(10)-使用python压缩图片的两种方式

原创
作者头像
JQ实验室
发布2024-09-24 09:35:40
发布2024-09-24 09:35:40
40000
代码可运行
举报
文章被收录于专栏:实用技术实用技术
运行总次数:0
代码可运行

使用python压缩图片大小分为两种情况:

  • 缩小图片尺寸,同时缩小了图片大小
  • 不改变图片尺寸,降低图片质量,缩小图片质量

两种情况都要使用PIL模块;

第一种情况,使用resize方法:

伪代码如下:

代码语言:python
代码运行次数:0
运行
复制
# 压缩图片文件
def compress_image(outfile, mb=150, k=0.9):
 
   """
   :param outfile: 压缩文件保存地址
   :param mb: 压缩目标,KB
   :param k: 每次调整的压缩比率
   :return: 压缩文件地址,压缩文件大小
   """
   from PIL import Image
   from PIL import ImageFile
   
   o_size = os.path.getsize(outfile) // 1024
   print(o_size, mb)
   if o_size <= mb:
       return outfile
   
   ImageFile.LOAD_TRUNCATED_IMAGES = True
   while o_size > mb:
       im = Image.open(outfile)
       x, y = im.size
       out = im.resize((int(x*k), int(y*k)), Image.ANTIALIAS)
       try:
           out.save(outfile)
       except Exception as e:
           print(e)
           break
       o_size = os.path.getsize(outfile) // 1024
   return outfile

第一种情况,使用save方法并添加quality参数:

伪代码如下:

代码语言:python
代码运行次数:0
运行
复制
# 不改变图片尺寸压缩到指定大小
def compress_img(img_path,new_img_path):
    import os
    from PIL import Image

    #img_path = "path/to/your/image"  # 要压缩的图片路径
    #new_img_path = "path/to/your/new/image"  # 压缩好的图片保存路径

    target_size = 150 * 1024  # 单位:字节(B),即目标大小 150 KB
    quality = 80  # 保留质量,1-100(默认 75),1 最差,100 最好,不建议过高且 100 会禁用一些压缩算法
    step = 10  # 降低质量的步长

    current_img = Image.open(img_path)  # 初始化当前图片为原图
    current_size = os.path.getsize(img_path)  # 初始化当前大小为原图片大小

    while current_size > target_size and quality > 0:
        current_img.save(new_img_path, quality=quality,
                        optimize=True)  # 压缩新图片到 new_img_path
        current_img = Image.open(new_img_path)  # 更新 current_img 为压缩后的新图片
        # 更新 current_size 为压缩后的新图片大小
        current_size = os.path.getsize(new_img_path)
        quality -= step

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档