本文目录导读:

- Python + Pillow库(最灵活)
- Python + OpenCV(高级调整)
- ImageMagick + Shell脚本(命令行)
- Node.js + Sharp库
- 使用GIMP的Batch Mode
- 安装依赖
Python + Pillow库(最灵活)
from PIL import Image, ImageEnhance
import os
import glob
def batch_adjust_tone(input_folder, output_folder, brightness=1.0, contrast=1.0, color=1.0, sharpness=1.0):
"""
批量调整图片色调
参数值范围:0.0-2.0,1.0为原始值
"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for img_path in glob.glob(os.path.join(input_folder, "*.[jJ][pP][gG]")) + \
glob.glob(os.path.join(input_folder, "*.[pP][nN][gG]")):
try:
img = Image.open(img_path)
# 调整亮度
enhancer = ImageEnhance.Brightness(img)
img = enhancer.enhance(brightness)
# 调整对比度
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(contrast)
# 调整色彩饱和度
enhancer = ImageEnhance.Color(img)
img = enhancer.enhance(color)
# 调整锐度
enhancer = ImageEnhance.Sharpness(img)
img = enhancer.enhance(sharpness)
# 保存图片
output_path = os.path.join(output_folder, os.path.basename(img_path))
img.save(output_path)
print(f"已处理: {img_path}")
except Exception as e:
print(f"处理 {img_path} 时出错: {e}")
# 使用示例
batch_adjust_tone(
input_folder="./input_images",
output_folder="./output_images",
brightness=1.2, # 增加亮度
contrast=1.1, # 增加对比度
color=0.8, # 降低色彩饱和度
sharpness=1.0 # 保持原始锐度
)
Python + OpenCV(高级调整)
import cv2
import numpy as np
import os
import glob
def batch_adjust_hsv(input_folder, output_folder, hue_shift=0, saturation_scale=1.0, value_scale=1.0):
"""
通过HSV空间调整色调
"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for img_path in glob.glob(os.path.join(input_folder, "*.*")):
if img_path.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff')):
img = cv2.imread(img_path)
if img is None:
continue
# 转换到HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
# 调整色调 (H通道)
h = (h.astype(np.int16) + hue_shift) % 180
h = h.astype(np.uint8)
# 调整饱和度 (S通道)
s = cv2.multiply(s, saturation_scale)
s = np.clip(s, 0, 255).astype(np.uint8)
# 调整亮度 (V通道)
v = cv2.multiply(v, value_scale)
v = np.clip(v, 0, 255).astype(np.uint8)
# 合并通道并转换回BGR
hsv_adjusted = cv2.merge([h, s, v])
img_adjusted = cv2.cvtColor(hsv_adjusted, cv2.COLOR_HSV2BGR)
# 保存
output_path = os.path.join(output_folder, os.path.basename(img_path))
cv2.imwrite(output_path, img_adjusted)
print(f"已处理: {img_path}")
# 使用示例
batch_adjust_hsv(
input_folder="./input_images",
output_folder="./output_images",
hue_shift=30, # 色调偏移30度
saturation_scale=1.5, # 饱和度增加50%
value_scale=0.8 # 亮度降低20%
)
ImageMagick + Shell脚本(命令行)
Linux/Mac:
#!/bin/bash
# 批量调整图片色调
input_dir="./input_images"
output_dir="./output_images"
mkdir -p "$output_dir"
# 调整色相、饱和度、亮度
for img in "$input_dir"/*.{jpg,png,jpeg}; do
if [ -f "$img" ]; then
filename=$(basename "$img")
# -modulate: 亮度,饱和度,色相 (百分比)
# -modulate 100,150,90 表示亮度不变,饱和度增加50%,色相减少10%
convert "$img" -modulate 100,150,90 "$output_dir/$filename"
echo "已处理: $filename"
fi
done
Windows (PowerShell):
# 如果安装了ImageMagick
$inputDir = ".\input_images"
$outputDir = ".\output_images"
New-Item -ItemType Directory -Force -Path $outputDir
Get-ChildItem -Path $inputDir -Include *.jpg, *.png, *.jpeg -Recurse | ForEach-Object {
$outputFile = Join-Path $outputDir $_.Name
magick convert $_.FullName -modulate 100,150,90 $outputFile
Write-Host "已处理: $($_.Name)"
}
Node.js + Sharp库
const sharp = require('sharp');
const fs = require('fs');
const path = require('path');
async function batchAdjustTone(inputDir, outputDir, options = {}) {
const {
brightness = 1.0,
saturation = 1.0,
hue = 0,
gamma = 1.0
} = options;
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
const files = fs.readdirSync(inputDir).filter(file =>
/\.(jpg|jpeg|png)$/i.test(file)
);
for (const file of files) {
const inputPath = path.join(inputDir, file);
const outputPath = path.join(outputDir, file);
try {
await sharp(inputPath)
.modulate({
brightness: brightness,
saturation: saturation,
hue: hue
})
.gamma(gamma)
.toFile(outputPath);
console.log(`已处理: ${file}`);
} catch (err) {
console.error(`处理 ${file} 时出错:`, err);
}
}
}
// 使用示例
batchAdjustTone('./input_images', './output_images', {
brightness: 1.2,
saturation: 1.5,
hue: 30 // 色调偏移30度
});
使用GIMP的Batch Mode
创建脚本文件 batch_tone_adjust.scm:
(define (batch-adjust-tone pattern brightness contrast hue sat)
(let* ((filelist (cadr (file-glob pattern 1))))
(while (not (null? filelist))
(let* ((filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image))))
; 调整亮度和对比度
(gimp-brightness-contrast drawable brightness contrast)
; 调整色相和饱和度
(gimp-hue-saturation drawable HUE-SAT hue sat 0)
; 保存为原格式
(set! new-filename (string-append (substring filename 0 (- (string-length filename) 4))
"_adjusted"
(substring filename (- (string-length filename) 4))))
(gimp-file-save RUN-NONINTERACTIVE image drawable new-filename new-filename)
(gimp-image-delete image)
)
(set! filelist (cdr filelist))
)
)
)
(batch-adjust-tone "*.jpg" 10 1.2 30 1.5) ; 参数示例
安装依赖
Python:
pip install pillow opencv-python
Node.js:
npm install sharp
ImageMagick:
- Linux:
sudo apt-get install imagemagick - Mac:
brew install imagemagick - Windows: 下载安装包
选择哪种方法取决于你的技术栈和具体需求,Python方法最灵活,ImageMagick最简单,Node.js适合Web开发者。