批量给图片加边框的脚本

wen 实用脚本 2

本文目录导读:

批量给图片加边框的脚本

  1. 方案一:Python + PIL/Pillow(最推荐)
  2. 方案二:带更多功能的版本
  3. 方案三:使用 ImageMagick 命令行工具
  4. 使用建议

Python + PIL/Pillow(最推荐)

import os
from PIL import Image, ImageOps
def batch_add_border(input_folder, output_folder, border_size=20, border_color='white'):
    """
    批量给图片添加边框
    参数:
    input_folder: 输入文件夹路径
    output_folder: 输出文件夹路径  
    border_size: 边框大小(像素)
    border_color: 边框颜色(可以是颜色名称或RGB元组)
    """
    # 创建输出文件夹(如果不存在)
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    # 支持的图片格式
    supported_formats = ('.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff')
    # 遍历所有图片文件
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(supported_formats):
            try:
                # 打开图片
                img_path = os.path.join(input_folder, filename)
                img = Image.open(img_path)
                # 添加边框
                img_with_border = ImageOps.expand(
                    img, 
                    border=border_size, 
                    fill=border_color
                )
                # 保存图片
                output_path = os.path.join(output_folder, f'bordered_{filename}')
                img_with_border.save(output_path)
                print(f"✅ 已处理: {filename}")
            except Exception as e:
                print(f"❌ 处理 {filename} 时出错: {str(e)}")
# 使用示例
if __name__ == "__main__":
    # 设置参数
    input_folder = "input_images"    # 输入图片文件夹
    output_folder = "bordered_images" # 输出文件夹
    # 添加白色边框
    batch_add_border(
        input_folder=input_folder,
        output_folder=output_folder,
        border_size=50,           # 边框大小
        border_color='white'      # 边框颜色
    )
    # 或者使用RGB颜色
    # border_color=(255, 0, 0)    # 红色边框

带更多功能的版本

import os
from PIL import Image, ImageOps, ImageDraw
import argparse
class ImageBorderAdder:
    def __init__(self):
        self.supported_formats = ('.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff')
    def add_border(self, input_path, output_path, border_size=20, 
                   border_color='white', border_style='solid'):
        """
        添加边框的完整功能版本
        border_style: 'solid', 'double', 'gradient'
        """
        img = Image.open(input_path)
        if border_style == 'solid':
            # 实心边框
            result = ImageOps.expand(img, border=border_size, fill=border_color)
        elif border_style == 'double':
            # 双线边框
            result = ImageOps.expand(img, border=border_size, fill=border_color)
            # 添加内边框
            inner_border_size = border_size // 2
            result = ImageOps.expand(result, border=inner_border_size, 
                                   fill='black' if border_color == 'white' else 'white')
        elif border_style == 'gradient':
            # 渐变边框(简化版)
            result = self._add_gradient_border(img, border_size)
        else:
            result = ImageOps.expand(img, border=border_size, fill=border_color)
        result.save(output_path)
        return True
    def _add_gradient_border(self, img, border_size):
        """创建渐变边框"""
        w, h = img.size
        new_w, new_h = w + 2*border_size, h + 2*border_size
        # 创建渐变背景
        gradient = Image.new('RGB', (new_w, new_h), 'white')
        draw = ImageDraw.Draw(gradient)
        # 简单渐变效果
        for i in range(border_size):
            color_value = int(255 * (1 - i/float(border_size)))
            draw.rectangle(
                [i, i, new_w-1-i, new_h-1-i],
                outline=(color_value, color_value, color_value),
                width=1
            )
        # 粘贴原图到中心
        gradient.paste(img, (border_size, border_size))
        return gradient
    def batch_process(self, input_folder, output_folder, **kwargs):
        """批量处理所有图片"""
        if not os.path.exists(output_folder):
            os.makedirs(output_folder)
        success_count = 0
        error_count = 0
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(self.supported_formats):
                try:
                    input_path = os.path.join(input_folder, filename)
                    # 自定义输出文件名
                    name, ext = os.path.splitext(filename)
                    output_filename = f"{name}_bordered{ext}"
                    output_path = os.path.join(output_folder, output_filename)
                    self.add_border(input_path, output_path, **kwargs)
                    print(f"✅ {filename} → {output_filename}")
                    success_count += 1
                except Exception as e:
                    print(f"❌ 错误处理 {filename}: {str(e)}")
                    error_count += 1
        print(f"\n📊 处理完成: {success_count} 成功, {error_count} 失败")
# 使用示例
if __name__ == "__main__":
    # 批量处理
    adder = ImageBorderAdder()
    # 添加实心边框
    adder.batch_process(
        input_folder="input_images",
        output_folder="output_images",
        border_size=30,
        border_color='white',
        border_style='solid'  # 或 'double'/'gradient'
    )

使用 ImageMagick 命令行工具

#!/bin/bash
# 保存为 add_border.sh
INPUT_DIR="input_images"
OUTPUT_DIR="output_images"
BORDER_SIZE=20
BORDER_COLOR="white"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 批量处理图片
for img in "$INPUT_DIR"/*.{jpg,jpeg,png,bmp,tiff,webp}; do
    if [ -f "$img" ]; then
        filename=$(basename "$img")
        echo "处理: $filename"
        # 使用ImageMagick添加边框
        convert "$img" -bordercolor "$BORDER_COLOR" -border "${BORDER_SIZE}x${BORDER_SIZE}" \
                "$OUTPUT_DIR/bordered_$filename"
        echo "✅ 完成: $filename"
    fi
done
echo "🎉 所有图片处理完成!"

使用建议

  1. 安装依赖

    pip install Pillow
  2. 调整参数

    • border_size: 边框像素大小
    • border_color: 颜色名称或RGB值
    • border_style: 边框样式
  3. 运行方式

    • 将图片放入 input_images 文件夹
    • 运行脚本后结果保存在 output_images 文件夹
  4. 自定义颜色

    border_color = (128, 64, 0)  # RGB格式
    border_color = 'red'          # 颜色名称
    border_color = '#FF0000'      # 十六进制

选择最适合您需求的方案即可,Python脚本方式最灵活,命令行方式最简单快捷。

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