脚本如何批量调整图片色彩混合

wen 实用脚本 27

本文目录导读:

脚本如何批量调整图片色彩混合

  1. Python + Pillow (PIL) - 最灵活的方式
  2. Python + OpenCV - 更专业的色彩处理
  3. ImageMagick - 命令行高效批量处理
  4. 批量调整预设风格(完整脚本)
  5. 使用 GPU 加速(处理大量图片)
  6. 安装依赖
  7. 推荐使用场景

Python + Pillow (PIL) - 最灵活的方式

from PIL import Image, ImageEnhance
import os
def batch_adjust_color(input_folder, output_folder, **kwargs):
    """批量调整图片色彩
    kwargs 参数:
        brightness: 亮度 (0.0-2.0)
        contrast: 对比度 (0.0-2.0)
        sharpness: 锐度 (0.0-2.0)
        color: 色彩饱和度 (0.0-2.0)
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
            img_path = os.path.join(input_folder, filename)
            img = Image.open(img_path)
            # 应用色彩调整
            if 'brightness' in kwargs:
                enhancer = ImageEnhance.Brightness(img)
                img = enhancer.enhance(kwargs['brightness'])
            if 'contrast' in kwargs:
                enhancer = ImageEnhance.Contrast(img)
                img = enhancer.enhance(kwargs['contrast'])
            if 'sharpness' in kwargs:
                enhancer = ImageEnhance.Sharpness(img)
                img = enhancer.enhance(kwargs['sharpness'])
            if 'color' in kwargs:
                enhancer = ImageEnhance.Color(img)
                img = enhancer.enhance(kwargs['color'])
            # 保存结果
            output_path = os.path.join(output_folder, filename)
            img.save(output_path)
            print(f"已处理: {filename}")
# 使用示例
batch_adjust_color(
    input_folder='source_images/',
    output_folder='adjusted_images/',
    brightness=1.2,    # 增加亮度
    contrast=1.1,      # 增加对比度
    sharpness=1.3,     # 增加锐度
    color=1.5          # 增加色彩饱和度
)

Python + OpenCV - 更专业的色彩处理

import cv2
import numpy as np
import os
def batch_color_mix(input_folder, output_folder, alpha=1.0, beta=0):
    """批量调整图片色彩混合
    alpha: 对比度 (1.0 = 原始)
    beta: 亮度 (0 = 原始)
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
            img_path = os.path.join(input_folder, filename)
            img = cv2.imread(img_path)
            # 调整亮度和对比度
            adjusted = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
            # 保存结果
            output_path = os.path.join(output_folder, filename)
            cv2.imwrite(output_path, adjusted)
            print(f"已处理: {filename}")
# 更复杂的色彩混合
def batch_color_balance(input_folder, output_folder, r_gain=1.0, g_gain=1.0, b_gain=1.0):
    """批量调整色彩平衡"""
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
            img_path = os.path.join(input_folder, filename)
            img = cv2.imread(img_path)
            # 分离色彩通道
            b, g, r = cv2.split(img)
            # 调整各通道
            r = cv2.multiply(r, r_gain)
            g = cv2.multiply(g, g_gain)
            b = cv2.multiply(b, b_gain)
            # 合并通道
            adjusted = cv2.merge([b, g, r])
            # 确保数值范围
            adjusted = np.clip(adjusted, 0, 255).astype(np.uint8)
            output_path = os.path.join(output_folder, filename)
            cv2.imwrite(output_path, adjusted)
            print(f"已处理: {filename}")
# 使用示例
batch_color_mix('input/', 'output/', alpha=1.5, beta=30)
batch_color_balance('input/', 'output/', r_gain=0.9, g_gain=1.1, b_gain=1.2)

ImageMagick - 命令行高效批量处理

# 批量调整亮度/对比度/饱和度
for img in *.jpg; do
    convert "$img" \
        -brightness-contrast 10x5 \
        -modulate 120,150,100 \
        "adjusted_$img"
done
# 或使用更简洁的 mogrify(直接修改原文件)
mogrify -path output/ \
    -brightness-contrast 10x5 \
    -modulate 120,150,100 \
    *.jpg
# 高级色彩混合
mogrify -path output/ \
    -colorize 30,20,10 \
    -color-matrix "1.5 0 0 0 0  0 1.2 0 0 0  0 0 1.1 0 0" \
    *.jpg

批量调整预设风格(完整脚本)

import os
from PIL import Image, ImageEnhance, ImageFilter
import json
class BatchColorAdjuster:
    def __init__(self, config_file=None):
        self.presets = {}
        if config_file and os.path.exists(config_file):
            with open(config_file, 'r') as f:
                self.presets = json.load(f)
    def add_preset(self, name, settings):
        """添加预设"""
        self.presets[name] = settings
    def apply_preset(self, img, preset_name):
        """应用预设"""
        if preset_name not in self.presets:
            return img
        settings = self.presets[preset_name]
        # 色彩调整
        if 'color' in settings:
            enhancer = ImageEnhance.Color(img)
            img = enhancer.enhance(settings['color'])
        if 'brightness' in settings:
            enhancer = ImageEnhance.Brightness(img)
            img = enhancer.enhance(settings['brightness'])
        if 'contrast' in settings:
            enhancer = ImageEnhance.Contrast(img)
            img = enhancer.enhance(settings['contrast'])
        if 'sharpness' in settings:
            enhancer = ImageEnhance.Sharpness(img)
            img = enhancer.enhance(settings['sharpness'])
        # 色温调整 (使用颜色矩阵)
        if 'temperature' in settings:
            temp = settings['temperature']
            if temp > 0:  # 暖色
                img = img.point(lambda x: x * (1 + temp * 0.1))
            else:  # 冷色
                img = img.point(lambda x: x * (1 - abs(temp) * 0.1))
        return img
    def process_folder(self, input_folder, output_folder, preset_name):
        """处理文件夹"""
        if not os.path.exists(output_folder):
            os.makedirs(output_folder)
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
                img_path = os.path.join(input_folder, filename)
                img = Image.open(img_path)
                # 应用预设
                img = self.apply_preset(img, preset_name)
                # 保存
                output_path = os.path.join(output_folder, filename)
                img.save(output_path, quality=95)
                print(f"已处理: {filename}")
# 使用示例
adjuster = BatchColorAdjuster()
# 添加预设
adjuster.add_preset('vintage', {
    'color': 0.7,
    'brightness': 0.9,
    'contrast': 1.2,
    'sharpness': 1.1,
    'temperature': 0.3  # 轻微暖色
})
adjuster.add_preset('vivid', {
    'color': 1.5,
    'brightness': 1.1,
    'contrast': 1.2,
    'sharpness': 1.2
})
# 批量处理
adjuster.process_folder('input/', 'output/', 'vintage')

使用 GPU 加速(处理大量图片)

import torch
import torchvision.transforms as transforms
from PIL import Image
import os
def batch_gpu_color_adjust(input_folder, output_folder, brightness=1.0, contrast=1.0, saturation=1.0, hue=0):
    """使用 GPU 加速批量色彩调整"""
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    # 定义色彩调整转换
    transform = transforms.Compose([
        transforms.ColorJitter(
            brightness=brightness-1,
            contrast=contrast-1,
            saturation=saturation-1,
            hue=hue
        ),
    ])
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            img_path = os.path.join(input_folder, filename)
            img = Image.open(img_path).convert('RGB')
            # 应用转换
            adjusted = transform(img)
            # 保存
            output_path = os.path.join(output_folder, filename)
            adjusted.save(output_path)
            print(f"已处理: {filename}")

安装依赖

# Pillow
pip install Pillow
# OpenCV
pip install opencv-python
# ImageMagick (需要安装)
# Windows: 下载安装包
# Mac: brew install imagemagick
# Linux: sudo apt-get install imagemagick
# PyTorch (GPU加速)
pip install torch torchvision

推荐使用场景

  1. 简单快速:使用 ImageMagick 命令行
  2. 灵活定制:使用 Python + Pillow
  3. 专业处理:使用 Python + OpenCV
  4. 批量预设:使用完整的 Python 脚本框架
  5. 超大量图片:使用 GPU 加速方案

选择最适合你需求的方案,可以根据需要进行组合修改!

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