本文目录导读:

- 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开发者。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播