功能
本脚本代码用于实现以下功能:
- 压缩自定义源文件夹中的全部图片(后缀为 .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】获取授权信息。
123
你好
|´・ω・)ノ