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

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

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

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

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

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

伪代码如下:


# 压缩图片文件
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参数:

伪代码如下:

# 不改变图片尺寸压缩到指定大小
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
相关文章
|
1月前
|
机器学习/深度学习 算法 TensorFlow
|
1月前
|
Python
Python 压缩PDF减小文件大小
【8月更文挑战第6天】介绍了三种用Python压缩PDF文件的方法:1) 使用`pdfcompressor`库,安装后可通过简单命令压缩文件;2) 利用`PyPDF2`库,需手动设置压缩参数;3) 采用`pdfsizeopt`库,一键优化PDF大小。各方法均提供示例代码,便于快速实现文件压缩。
108 0
|
9天前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
75 1
|
11天前
|
Python
python知识点
【8月更文挑战第27天】python知识点
27 1
Python实现PowerPoint演示文稿到图片的批量转换
PowerPoint演示文稿作为展示创意、分享知识和表达观点的重要工具,被广泛应用于教育、商务汇报及个人项目展示等领域。然而,面对不同的分享场景与接收者需求,有时需要我们将PPT内容以图片形式保存与传播。 这样能够避免软件兼容性的限制,确保信息接收者无需安装特定软件即可查看内容,还便于在网络社交平台、博客、电子邮件中快速分享与嵌入。而用Python代码可以高效地实现PowerPoint演示文稿到图片的批量转换,从而提升工作效率。
|
30天前
|
机器学习/深度学习 算法 TensorFlow
WK
|
19天前
|
存储 机器学习/深度学习 JSON
Python入门知识点
Python入门覆盖历史、设计理念、变量、数据类型、控制结构等。了解Python的发展,掌握动态类型的灵活性,熟悉整数、浮点数、字符串等数据类型。学会if/else、for/while循环构建逻辑流程,使用def定义函数,lambda快速创建匿名函数。通过类实现面向对象编程,利用模块和包组织代码。掌握try-except处理异常,open()进行文件操作。利用标准库和第三方库增强功能,理解集合、字典、列表推导式的应用,深入魔法方法、递归、装饰器等高级特性,以及上下文管理器和字符串、列表、元组的操作技巧。
WK
24 0
|
26天前
|
存储 Python
Python时间模块四大必备知识点
Python时间模块四大必备知识点
39 4
Python时间模块四大必备知识点
|
10天前
|
数据安全/隐私保护 Python Windows
三种方法,Python轻松提取PDF中全部图片
三种方法,Python轻松提取PDF中全部图片
|
9天前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
13 1
下一篇
DDNS