使用Python实现任意比率批量图片压缩

功能

本脚本代码用于实现以下功能:

  • 压缩自定义源文件夹中的全部图片(后缀为 .jpg、.jpeg 和 .png)
  • 自定义压缩率
  • 保持原像素和画质缩小文件体积
  • 按“IMG_[拍摄时间]_[2位数序号].后缀”重命名文件
    (拍摄时间从图片exif数据中提取,如不存在exif则使用文件修改时间)
  • 输出到自定义目标文件夹

代码

Python3:

import os
from PIL import Image
import piexif
from datetime import datetime

def get_exif_datetime(img_path): # 从EXIF数据中获取拍摄时间
    try:
        exif_dict = piexif.load(img_path)
        dt_bytes = exif_dict['Exif'].get(piexif.ExifIFD.DateTimeOriginal)
        if dt_bytes:
            dt_str = dt_bytes.decode()
            return datetime.strptime(dt_str, "%Y:%m:%d %H:%M:%S") 
    except Exception:
        pass
    return None

def get_file_datetime(img_path): # 用文件的最后修改时间
    t = os.path.getmtime(img_path)
    return datetime.fromtimestamp(t)

def compress_image(src_path, dst_path, quality): # 压缩并保存图片
    img = Image.open(src_path)
    if img.mode in ("RGBA", "P"):
        img = img.convert("RGB")
    img.save(dst_path, quality=quality, optimize=True)

def get_next_seq(folder, date_str, ext): # 获取下一个序号
    files = [f for f in os.listdir(folder) if f.startswith(f"HD_" + date_str + "_") and f.lower().endswith(ext)]
    nums = []
    for f in files:
        try:
            num = int(f.split("_")[2].split(".")[0])
            nums.append(num)
        except Exception:
            continue
    return max(nums, default=0) + 1

def main(src_folder, dst_folder, quality): # 主函数
    if not os.path.exists(dst_folder):
        os.makedirs(dst_folder)
    for fname in os.listdir(src_folder):
        if not fname.lower().endswith(('.jpg', '.jpeg', '.png')):
            continue
        src_path = os.path.join(src_folder, fname)
        dt = get_exif_datetime(src_path)
        if not dt:
            dt = get_file_datetime(src_path)
            print(f"未找到EXIF时间,使用文件时间:{fname} -> {dt.strftime('%Y-%m-%d %H:%M:%S')}")
        date_str = dt.strftime("%Y%m%d")
        ext = os.path.splitext(fname)[1].lower()
        seq = get_next_seq(dst_folder, date_str, ext)
        new_name = f"IMG_{date_str}_{seq:02d}{ext}"
        dst_path = os.path.join(dst_folder, new_name)
        compress_image(src_path, dst_path, quality)
        print(f"{fname} -> {new_name}")

if __name__ == "__main__":
    # 修改为你的图片文件夹路径
    src_folder = r"D:\Src"   # 源图片文件夹
    dst_folder = r"D:\Dst"   # 压缩后图片保存文件夹
    quality = 85     # 设置压缩比(0~100,100为最佳)
    main(src_folder, dst_folder, quality)

使用说明

需引入 piexif 库以实现获取exif信息进行文件重命名。在终端输入以下指令安装。

pip install piexif

需引入 PIL 库以支持图像存储、显示和处理等操作。在终端输入以下指令安装。

pip install pillow

安装好所需的库后,需要自定义源图片文件夹和压缩后图片保存的文件夹,将路径替换至以下语句中(需注意不要多或漏写引号)

    src_folder = r"D:\Src"   # 源图片文件夹
    dst_folder = r"D:\Dst"   # 压缩后图片保存文件夹

默认压缩比为85,可根据自身需要进行修改。

    quality = 85     # 设置压缩比(0~100,100为最佳)

本文经「原本」原创认证,作者黄导HD,访问yuanben.io查询【5U4ZTM2E】获取授权信息。

本文标题:使用Python实现任意比率批量图片压缩
如无特殊标注,本文著作权归属 黄导HD 所有,欢迎分享,转载需注明来源。

评论

  1. 345
    2 周前
    2025-11-24 23:23:04

    123

    • Avatar photo
      博主
      345
      2 周前
      2025-11-24 23:23:33

      你好

  2. Avatar photo
    博主
    2 周前
    2025-11-24 23:06:08

    |´・ω・)ノ

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇