使用guetzli递归压缩当前目录下的所有jpeg和jpg图片的python脚本

字号+ 编辑: 种花家 修订: 种花家 来源: 2025-01-22 我要说两句(0)

这个脚本的前提是你已经安装了guetzli, 如果没安装, 这个批量压缩图片的脚本会报错。

这个脚本会同时放出4个guetzli进程来压缩jpg和jpeg图片, guetzli消耗非常大, 请根据你当前机器的内存和cpu配置来调整max_processes的值。

先放出脚本源码

import os
import subprocess
import shlex


def traverse(path='.'):
 file_paths = []
 for root, dirs, files in os.walk(path):
  for file in files:
   if file.endswith('.jpeg') or file.endswith('.jpg'):
    file_paths.append(os.path.join(root, file))
 return file_paths


def run_guetzli(file_paths, max_processes=4):
 processes = []
 for file_path in file_paths:
  while len(processes) >= max_processes:
   processes = [p for p in processes if p.poll() is None]
   time.sleep(5)
  # 使用 shlex.quote 对文件路径进行转义
  safe_file_path = shlex.quote(file_path)
  try:
   p = subprocess.Popen(
    ['guetzli', '--quality', '100', '--nomemlimit', safe_file_path, safe_file_path],
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL
   )
   processes.append(p)
  except FileNotFoundError:
   print(f"guetzli command not found for file {file_path}")


if __name__ == "__main__":
 import time
 file_paths = traverse('.')
 run_guetzli(file_paths)

安装guetzli的方法:

苹果

brew install guetzli

linux

https://github.com/google/guetzli/releases

阅完此文,您的感想如何?
  • 有用

    142

  • 没用

    3

  • 开心

    12

  • 愤怒

    1

  • 可怜

    3

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.Q群: 2702237 13835667

相关课文
  • 通过i参数使用国内镜像给pip安装提速

  • Conda删除不用的虚拟环境

  • flask框架知识点总结

  • linux - centos 7.x安装python3.10教程

我要说说
网上嘉宾点评