脚本如何批量调整图片色调

wen 实用脚本 1

本文目录导读:

脚本如何批量调整图片色调

  1. Python + Pillow库(最灵活)
  2. Python + OpenCV(高级调整)
  3. ImageMagick + Shell脚本(命令行)
  4. Node.js + Sharp库
  5. 使用GIMP的Batch Mode
  6. 安装依赖

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开发者。

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