使用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.交流群: 2702237 13835667

相關課文
  • 通過i參數使用國内鏡像給pip安裝提速

  • Conda刪除不用的虛擬環境

  • flask框架知識點總結

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

我要說說
網上賓友點評