如何压缩JPG图片使按大小排序与按名称排序一致
批量调整JPG大小实现名称排序与大小排序一致
以下是几种高效的批量处理方案,无需手动操作:
方法1:使用ImageMagick(跨平台)
先确保安装ImageMagick,然后用脚本批量处理:
# 设置基础大小(10KB)和每个文件的大小增量(5KB) base_size=10240 increment=5120 for i in {01..24}; do # 计算当前文件的目标大小 target_size=$((base_size + (10#$i - 1)*increment)) # 压缩图片至目标大小附近 convert "$i.jpg" -define jpeg:extent=${target_size}B "$i_resized.jpg" done
- 说明:
jpeg:extent参数会将图片压缩到指定大小以下,接近目标值。可根据实际情况调整基础大小和增量,确保编号大的文件体积始终大于前一个。
方法2:使用ffmpeg(跨平台)
安装ffmpeg后,通过调整JPG质量控制体积:
# 初始质量(31为最低质量、最小体积),每个后续文件质量降低1(体积增大) base_q=31 q_decrement=1 for i in {01..24}; do quality=$((base_q - (10#$i - 1))) # 确保质量不低于最高阈值1 [ $quality -lt 1 ] && quality=1 ffmpeg -y -i "$i.jpg" -q:v $quality "$i_resized.jpg" done
- 说明:ffmpeg的
-q:v参数范围1-31,值越小质量越高、体积越大,因此编号越大的文件质量设置越高,体积自然更大。
方法3:Python脚本(精准控制)
借助PIL库实现更灵活的大小控制,先执行pip install pillow安装依赖:
from PIL import Image import os # 配置参数 base_size_kb = 10 increment_kb = 5 input_dir = "./" output_dir = "./resized" os.makedirs(output_dir, exist_ok=True) for i in range(1, 25): filename = f"{i:02d}.jpg" input_path = os.path.join(input_dir, filename) output_path = os.path.join(output_dir, filename) if not os.path.exists(input_path): continue target_size = (base_size_kb + (i-1)*increment_kb) * 1024 quality = 85 img = Image.open(input_path) # 先通过调整质量接近目标大小 while True: img.save(output_path, "JPEG", quality=quality) file_size = os.path.getsize(output_path) if file_size <= target_size or quality <= 10: break quality -= 5 # 若质量调整后仍过大,缩小图片尺寸 while file_size > target_size: width, height = img.size img = img.resize((int(width*0.9), int(height*0.9)), Image.Resampling.LANCZOS) img.save(output_path, "JPEG", quality=quality) file_size = os.path.getsize(output_path)
- 说明:脚本会先调整图片质量,若仍无法达到目标大小则逐步缩小尺寸,确保每个文件体积严格按编号递增。
注意事项
- 操作前务必备份原图片,避免数据丢失
- 可先测试1-3张图片,调整基础大小和增量参数,找到适合的数值
- 不同图片原始内容差异可能导致体积波动,增量可适当设大,确保排序顺序不会颠倒
内容的提问来源于stack exchange,提问作者pragmatrick
相关产品推荐
相关产品推荐

