实用脚本能自动压缩图片质量吗?

wen 实用脚本 1

本文目录导读:

实用脚本能自动压缩图片质量吗?

  1. 方案一:基于命令行工具 ImageMagick (最通用, 跨平台)
  2. 方案二:基于 tinypng API (最佳质量与文件大小平衡)
  3. 方案三:基于 Node.js 的 sharp 库 (速度极快, 无网络依赖)
  4. 方案四:Python 脚本 (使用 Pillow 库)
  5. 总结建议

是的,实用脚本可以自动压缩图片质量,这在网页开发、应用开发、批量处理图片等场景中非常实用。

下面提供几种常见且高效的脚本方案,分别适用于命令行(程序员友好)、桌面环境(右键一键处理)以及特定语言(Node.js/Python)。

基于命令行工具 ImageMagick (最通用, 跨平台)

ImageMagick 是一个强大的图像处理套件,几乎所有Linux/Mac/Windows都支持。

脚本示例 (Bash / Shell - 批量压缩当前目录所有jpg/png):

#!/bin/bash
# compress_images.sh
# 设置压缩质量 (1-100, 数值越小文件越小, 质量越低)
QUALITY=80
# 创建输出目录
OUTPUT_DIR="./compressed"
mkdir -p "$OUTPUT_DIR"
# 压缩所有JPG文件
for img in *.jpg *.jpeg *.png; do
    if [ -f "$img" ]; then
        echo "正在压缩: $img"
        convert "$img" -quality "$QUALITY" "$OUTPUT_DIR/$img"
    fi
done
echo "所有图片已压缩至 $OUTPUT_DIR 目录"

使用方法:

  1. 安装 ImageMagick (brew install imagemagick 或在Windows下载安装包)。
  2. 将以上代码保存为 compress.sh
  3. 在图片所在目录执行:chmod +x compress.sh && ./compress.sh

优点:功能强大,支持格式多,质量可控。 缺点:对于PNG,-quality参数效果不如专用工具(如PNGQuant)好。


基于 tinypng API (最佳质量与文件大小平衡)

TinyPNG 是业界公认的压缩网站,它提供了官方API脚本,压缩效果几乎无损,且文件体积减小非常明显,免费版每月可压500张。

脚本示例 (Node.js - 需要安装依赖):

// compress_images.js
const tinify = require("tinify");
const fs = require("fs");
const path = require("path");
// 1. 去 https://tinypng.com/developers 注册获取API Key
tinify.key = "YOUR_API_KEY";
const inputDir = "./images"; // 原始图片目录
const outputDir = "./compressed"; // 输出目录
if (!fs.existsSync(outputDir)) {
  fs.mkdirSync(outputDir);
}
// 读取目录下所有图片
fs.readdirSync(inputDir).forEach((file) => {
  const ext = path.extname(file).toLowerCase();
  if ([".jpg", ".jpeg", ".png", ".webp"].includes(ext)) {
    const sourcePath = path.join(inputDir, file);
    const destPath = path.join(outputDir, file);
    // 使用TinyPNG进行压缩
    tinify.fromFile(sourcePath).toFile(destPath).then(() => {
      console.log(`压缩成功: ${file}`);
    }).catch(err => {
      console.error(`压缩失败 ${file}:`, err.message);
    });
  }
});

使用方法:

  1. npm init -y
  2. npm install tinify
  3. 替换 YOUR_API_KEY,运行 node compress_images.js

优点:效果极佳,支持WebP,自动优化。 缺点:需要网络,免费版有数量限制。


基于 Node.js 的 sharp 库 (速度极快, 无网络依赖)

如果你需要纯粹的本地脚本来处理高质量图片,sharp 是最佳选择之一,它基于libvips,处理速度非常快。

脚本示例 (Node.js - 批量压缩):

// compress_sharp.js
const sharp = require('sharp');
const fs = require('fs');
const path = require('path');
const inputDir = './input';
const outputDir = './output';
if (!fs.existsSync(outputDir)) {
  fs.mkdirSync(outputDir);
}
fs.readdirSync(inputDir).forEach(file => {
  const ext = path.extname(file).toLowerCase();
  if (['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) {
    const inputPath = path.join(inputDir, file);
    const outputPath = path.join(outputDir, file);
    let pipeline = sharp(inputPath);
    if (ext === '.png') {
      // PNG压缩 (0-9, 9为最压缩)
      pipeline = pipeline.png({ compressionLevel: 9, palette: true });
    } else {
      // JPEG/WebP 压缩 (1-100, 80左右平衡)
      pipeline = pipeline.jpeg({ quality: 80, mozjpeg: true });
    }
    pipeline.toFile(outputPath)
      .then(() => console.log(`压缩完成: ${file}`))
      .catch(err => console.error(`错误: ${file}`, err));
  }
});

使用方法:

  1. npm init -y
  2. npm install sharp
  3. 放入图片,运行 node compress_sharp.js

优点:纯本地,速度快,质量可控,支持格式多。 缺点:需要Node.js环境。


Python 脚本 (使用 Pillow 库)

对于熟悉Python的用户,这是一个可靠的方案。

# compress_images.py
from PIL import Image
import os
input_dir = "./input"
output_dir = "./output"
quality = 85  # JPEG质量
png_compress_level = 9  # PNG压缩等级 (0-9)
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
for filename in os.listdir(input_dir):
    if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
        img_path = os.path.join(input_dir, filename)
        img = Image.open(img_path)
        # 转换为RGB模式以支持JPEG
        if img.mode in ("RGBA", "P"):
            img = img.convert("RGB")
        output_path = os.path.join(output_dir, filename)
        if filename.lower().endswith('.png'):
            # 对于PNG,Pillow不支持直接设置quality,需要通过优化参数
            img.save(output_path, optimize=True, compress_level=png_compress_level)
        else:
            img.save(output_path, optimize=True, quality=quality)
        print(f"压缩完成: {filename}")
print("所有图片处理完毕!")

使用方法:

  1. pip install Pillow
  2. 运行 python compress_images.py

优点:简单,Python生态好。 缺点:PNG压缩效果不如专用工具。


总结建议

场景 推荐方案 理由
快速批量处理 ImageMagick (方案一) 无需编程,一条命令搞定
追求极致压缩效果 TinyPNG API (方案二) 视觉无损,效果最好
需要在线/批量处理 Shubox / Kraken.io (在线服务) 无需安装任何东西,直接上传
高性能本地处理 Sharp (方案三) 比Pillow快几倍,支持格式多
Python生态内 Pillow (方案四) 集成到现有Python项目最方便

小提示:对于最重要的图片,建议先备份原始文件,然后使用TinyPNGSharpquality: 80-85参数,这样可以在文件大小和质量之间取得很好的平衡。

抱歉,评论功能暂时关闭!