批量调整图片锐度的脚本

wen 实用脚本 1

本文目录导读:

批量调整图片锐度的脚本

  1. 准备工作
  2. 脚本代码
  3. 使用方法
  4. sharpness_factor 参数说明
  5. 高级功能扩展

准备工作

首先安装依赖库:

pip install Pillow

脚本代码

import os
from PIL import Image, ImageEnhance, UnidentifiedImageError
def batch_adjust_sharpness(input_dir, output_dir, sharpness_factor, 
                          input_formats=None, output_format=None, 
                          quality=95, overwrite=False):
    """
    批量调整图片锐度
    参数:
        input_dir: 输入目录路径
        output_dir: 输出目录路径
        sharpness_factor: 锐度调整因子 (1.0=原始, >1.0增加锐度, <1.0降低锐度)
        input_formats: 输入格式列表,如 ['.jpg', '.png'],None表示所有支持格式
        output_format: 输出格式,如 '.jpg',None表示保持原格式
        quality: JPEG/WebP输出质量 (1-100)
        overwrite: 是否覆盖已有文件
    """
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    # 支持的图片格式
    supported_formats = {'.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.webp', '.gif'}
    # 统计信息
    processed = 0
    failed = 0
    skipped = 0
    # 遍历输入目录
    for filename in os.listdir(input_dir):
        file_path = os.path.join(input_dir, filename)
        # 跳过非文件
        if not os.path.isfile(file_path):
            continue
        # 检查文件扩展名
        ext = os.path.splitext(filename)[1].lower()
        # 检查是否为支持的格式
        if ext not in supported_formats:
            print(f"跳过不支持格式: {filename}")
            skipped += 1
            continue
        # 按指定格式检查
        if input_formats and ext not in [f.lower() if f.startswith('.') else f'.{f.lower()}' for f in input_formats]:
            print(f"跳过未指定格式: {filename}")
            skipped += 1
            continue
        # 确定输出格式
        if output_format:
            out_ext = output_format if output_format.startswith('.') else f'.{output_format}'
            # 去除扩展名部分
            base_name = os.path.splitext(filename)[0]
            output_filename = f"{base_name}{out_ext}"
        else:
            output_filename = filename
        output_path = os.path.join(output_dir, output_filename)
        # 检查文件是否已存在
        if os.path.exists(output_path) and not overwrite:
            print(f"跳过已存在文件: {output_filename}")
            skipped += 1
            continue
        try:
            # 打开图片
            with Image.open(file_path) as img:
                # 转换为RGB模式(处理RGBA、P模式等)
                if img.mode in ('RGBA', 'LA', 'P'):
                    img = img.convert('RGBA')
                elif img.mode != 'RGB':
                    img = img.convert('RGB')
                # 调整锐度
                enhancer = ImageEnhance.Sharpness(img)
                sharpened = enhancer.enhance(sharpness_factor)
                # 保存图片
                if output_format:
                    # 指定格式保存
                    sharpened.save(output_path, format=output_format.upper(), quality=quality)
                else:
                    # 保持原格式保存
                    if ext in ('.jpg', '.jpeg'):
                        sharpened.save(output_path, 'JPEG', quality=quality)
                    elif ext == '.png':
                        sharpened.save(output_path, 'PNG')
                    elif ext == '.webp':
                        sharpened.save(output_path, 'WebP', quality=quality)
                    else:
                        sharpened.save(output_path)
                processed += 1
                print(f"✓ 已处理: {filename} -> {output_filename}")
        except UnidentifiedImageError:
            print(f"✗ 无法识别图片: {filename}")
            failed += 1
        except Exception as e:
            print(f"✗ 处理失败 {filename}: {str(e)}")
            failed += 1
    # 打印统计信息
    print("\n=== 处理完成 ===")
    print(f"成功处理: {processed} 张")
    print(f"处理失败: {failed} 张")
    print(f"跳过: {skipped} 张")
# 使用示例
if __name__ == "__main__":
    # 配置参数
    input_directory = "./input_images"    # 输入图片目录
    output_directory = "./output_sharp"   # 输出图片目录
    # 锐度调整因子说明:
    # 1.0 = 原始锐度
    # 2.0 = 双倍锐度
    # 0.5 = 半倍锐度(模糊)
    sharpness = 2.0  # 增加锐度
    # 指定输入格式(可选)
    # image_formats = ['.jpg', '.png']  # 仅处理jpg和png
    image_formats = None  # 处理所有支持格式
    # 输出格式(可选)
    # output_img_format = '.png'  # 全部转为PNG
    output_img_format = None  # 保持原格式
    # 执行批量处理
    batch_adjust_sharpness(
        input_dir=input_directory,
        output_dir=output_directory,
        sharpness_factor=sharpness,
        input_formats=image_formats,
        output_format=output_img_format,
        quality=95,
        overwrite=False  # 不覆盖已有文件
    )

使用方法

  1. 创建目录结构

    project/
    ├── input_images/    # 放入要处理的图片
    └── script.py        # 保存上面的脚本
  2. 修改配置参数

    input_directory = "./input_images"    # 输入目录
    output_directory = "./output_sharp"   # 输出目录
    sharpness = 2.0                       # 锐度因子
  3. 运行脚本

    python batch_sharpness.py

sharpness_factor 参数说明

效果 适用场景
0 完全模糊 特殊效果
5 轻微模糊 柔化效果
0 原始锐度 保持不变
0 明显锐化 改善图像清晰度
0 强力锐化 非常模糊的图片
0+ 极端锐化 特殊艺术效果

高级功能扩展

如果需要更精细的控制,可以添加以下功能:

def batch_advanced_sharpness(input_dir, output_dir, sharpness_value, 
                            use_unsharp_mask=True, radius=2.0, percent=150):
    """
    使用USM锐化进行更精细的控制
    USM参数说明:
    - radius: 锐化半径
    - percent: 锐化强度百分比
    """
    from PIL import ImageFilter
    # ... 在循环中 ...
    if use_unsharp_mask:
        sharpened = img.filter(ImageFilter.UnsharpMask(
            radius=radius, 
            percent=percent
        ))
    else:
        enhancer = ImageEnhance.Sharpness(img)
        sharpened = enhancer.enhance(sharpness_value)

这个脚本简单实用,可以满足大多数批量调整锐度的需求。

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