• Python 压缩图片到指定大小 挪威


    import base64
    import io
    import os
    import time
    from PIL import Image
    from PIL import ImageFile
    
    # 压缩图片文件
    def compress_image(outfile, mb=100, quality=85, k=0.9):
     """不改变图片尺寸压缩到指定大小
     :param outfile: 压缩文件保存地址
     :param mb: 压缩目标,KB
     :param step: 每次调整的压缩比率
     :param quality: 初始压缩比率
     :return: 压缩文件地址,压缩文件大小
     """
     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, quality=quality)
      except Exception as e:
       print(e)
       break
      o_size = os.path.getsize(outfile) // 1024
     return outfile
    
    
     # 压缩base64的图片
     def compress_image_bs4(b64, mb=190, k=0.9):
      """不改变图片尺寸压缩到指定大小
      :param outfile: 压缩文件保存地址
      :param mb: 压缩目标,KB
      :param step: 每次调整的压缩比率
      :param quality: 初始压缩比率
      :return: 压缩文件地址,压缩文件大小
      """
      f = base64.b64decode(b64)
      with io.BytesIO(f) as im:
        o_size = len(im.getvalue()) // 1024
        if o_size <= mb:
          return b64
        im_out = im
        while o_size > mb:
         img = Image.open(im_out)
         x, y = img.size
         out = img.resize((int(x * k), int(y * k)), Image.ANTIALIAS)
         im_out.close()
         im_out = io.BytesIO()
         out.save(im_out, 'jpeg')
         o_size = len(im_out.getvalue()) // 1024
        b64 = base64.b64encode(im_out.getvalue())
        im_out.close()
        return str(b64, encoding='utf8')
    
    def file_extension(path):
      return os.path.splitext(path)[1]
    
    total = 1
    print('['+time.strftime("%Y-%m-%d %H:%M:%S")+'] 开始')
    if __name__ == "__main__":
     for img in os.listdir('./photo'):
      #print(img)
      if file_extension(str(img)) == '.jpeg' or file_extension(str(img)) == '.jpg' or file_extension(str(img)) == '.png':
        print('['+time.strftime("%Y-%m-%d %H:%M:%S")+'] '+str(total)+'-正常处理图片:'+str(img))
        compress_image(outfile='./photo/' + img)
      else:
        print('['+time.strftime("%Y-%m-%d %H:%M:%S")+'] '+str(total)+'-异常处理非图片格式!')
      total = total + 1
    print('['+time.strftime("%Y-%m-%d %H:%M:%S")+'] 结束')
  • 相关阅读:
    ObjectiveC 日记①
    C# WPF vs WinForm
    Ext.Net之 GridPanel Excel导出方法实现
    C 温故知新 之 指针:函数指针变量、指针型函数
    C 温故知新 之 指针:基本概念&变量的指针和指向变量的指针
    C 温故知新 之 指针:数组指针、字符串指针、函数指针
    Linq之 推迟查询 VS 立即查询
    Windows 下搭建ObjectiveC 开发环境
    (转) ObjectiveC 日记② 关于self用法
    windows phone 8 开发环境详细图解
  • 原文地址:https://www.cnblogs.com/allenlf/p/16020983.html
Copyright © 2020-2023  润新知