实用脚本能自动生成图片缩略图吗?

wen 实用脚本 2

本文目录导读:

实用脚本能自动生成图片缩略图吗?

  1. Python脚本(最灵活,推荐)
  2. Shell脚本(Linux/macOS)
  3. Node.js脚本(Web项目常用)
  4. Windows批处理脚本
  5. 一键运行脚本(跨平台)
  6. 使用建议

是的,完全可以通过脚本自动生成图片缩略图,以下是几种不同场景下的实用脚本方案:

Python脚本(最灵活,推荐)

安装依赖:

pip install pillow

批量生成缩略图脚本:

import os
from PIL import Image
import glob
def create_thumbnails(input_dir, output_dir, size=(150, 150)):
    """批量生成缩略图"""
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    # 支持的图片格式
    extensions = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp']
    for ext in extensions:
        for filepath in glob.glob(os.path.join(input_dir, ext)):
            filename = os.path.basename(filepath)
            try:
                # 打开图片
                with Image.open(filepath) as img:
                    # 生成缩略图(保持宽高比)
                    img.thumbnail(size, Image.LANCZOS)
                    # 保存缩略图
                    output_path = os.path.join(output_dir, f"thumb_{filename}")
                    img.save(output_path, optimize=True)
                    print(f"已生成: {output_path}")
            except Exception as e:
                print(f"处理 {filepath} 失败: {e}")
# 使用示例
create_thumbnails("./images", "./thumbnails", (200, 200))

Shell脚本(Linux/macOS)

使用ImageMagick(需要先安装):

#!/bin/bash
# 安装ImageMagick: brew install imagemagick (macOS)
# sudo apt-get install imagemagick (Ubuntu)
input_dir="./images"
output_dir="./thumbnails"
size="200x200"
mkdir -p "$output_dir"
for img in "$input_dir"/*.{jpg,jpeg,png,gif}; do
    if [ -f "$img" ]; then
        filename=$(basename "$img")
        convert "$img" -thumbnail "$size" -quality 85 "$output_dir/thumb_$filename"
        echo "已生成: $output_dir/thumb_$filename"
    fi
done

Node.js脚本(Web项目常用)

const sharp = require('sharp');
const fs = require('fs');
const path = require('path');
// 安装: npm install sharp
async function generateThumbnails(inputDir, outputDir, width = 200) {
    if (!fs.existsSync(outputDir)) {
        fs.mkdirSync(outputDir, { recursive: true });
    }
    const files = fs.readdirSync(inputDir);
    for (const file of files) {
        const ext = path.extname(file).toLowerCase();
        if (['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) {
            const inputPath = path.join(inputDir, file);
            const outputPath = path.join(outputDir, `thumb_${file}`);
            await sharp(inputPath)
                .resize(width)
                .toFile(outputPath);
            console.log(`已生成: ${outputPath}`);
        }
    }
}
// 使用
generateThumbnails('./images', './thumbnails', 200);

Windows批处理脚本

@echo off
setlocal enabledelayedexpansion
set input_dir=.\images
set output_dir=.\thumbnails
set size=200
if not exist %output_dir% mkdir %output_dir%
for %%f in (%input_dir%\*.jpg %input_dir%\*.png %input_dir%\*.jpeg) do (
    echo 处理中: %%~nxf
    rem 使用ImageMagick的convert命令(需要安装)
    convert "%%f" -thumbnail %size%x%size% -quality 85 "%output_dir%\thumb_%%~nxf"
)
echo 完成!
pause

一键运行脚本(跨平台)

# quick_thumb.py - 简单易用的缩略图生成器
import os
from PIL import Image
def quick_thumb():
    print("=== 图片缩略图生成器 ===\n")
    input_dir = input("输入源文件夹路径(默认 ./images): ") or "./images"
    size = input("输入缩略图尺寸(如 200,200): ") or "200,200"
    size = tuple(int(x) for x in size.split(','))
    # 检查文件夹
    if not os.path.exists(input_dir):
        print(f"错误:文件夹 {input_dir} 不存在")
        return
    output_dir = f"{input_dir}_thumbs"
    os.makedirs(output_dir, exist_ok=True)
    count = 0
    for file in os.listdir(input_dir):
        if file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp')):
            try:
                img_path = os.path.join(input_dir, file)
                with Image.open(img_path) as img:
                    img.thumbnail(size, Image.LANCZOS)
                    img.save(os.path.join(output_dir, f"thumb_{file}"), optimize=True)
                    count += 1
                    print(f"✓ {file} → thumb_{file}")
            except Exception as e:
                print(f"✗ {file} 处理失败: {e}")
    print(f"\n完成!共生成 {count} 个缩略图")
    print(f"输出目录: {output_dir}")
if __name__ == "__main__":
    quick_thumb()

使用建议

场景 推荐方案 理由
简单批量处理 Python + Pillow 免费、跨平台、易修改
网站图片处理 Node.js + Sharp 速度快、支持格式多
Linux服务器 Shell + ImageMagick 无需额外安装
微信小程序/Web JavaScript 前端直接处理
大量图片(1000+) Python多线程版 并行处理效率高

重要提示: 如果需要处理大量图片(尤其是需要保持原始目录结构),推荐使用专业工具如 imagemagickmogrify 命令,或在Python脚本中添加目录遍历功能。

需要我提供特定场景(如网站自动生成、批量改尺寸)的优化版本吗?

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