本文目录导读:

准备工作
首先安装依赖库:
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 # 不覆盖已有文件
)
使用方法
-
创建目录结构:
project/ ├── input_images/ # 放入要处理的图片 └── script.py # 保存上面的脚本 -
修改配置参数:
input_directory = "./input_images" # 输入目录 output_directory = "./output_sharp" # 输出目录 sharpness = 2.0 # 锐度因子
-
运行脚本:
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)
这个脚本简单实用,可以满足大多数批量调整锐度的需求。