如何用脚本批量添加图片边框?

wen 实用脚本 1

本文目录导读:

如何用脚本批量添加图片边框?

  1. 方法1:使用 ImageMagick(推荐)
  2. 方法2:使用 Python + Pillow
  3. 方法3:使用 Python + OpenCV
  4. 方法4:使用 Photoshop 批处理
  5. 方法5:使用在线工具(小图片)
  6. 批量处理脚本(高级版)
  7. 使用建议

方法1:使用 ImageMagick(推荐)

ImageMagick 是最强大的命令行图像处理工具。

安装

# macOS
brew install imagemagick
# Ubuntu/Debian
sudo apt-get install imagemagick
# Windows
choco install imagemagick

批量添加边框脚本

Windows (批处理)

@echo off
mkdir output
for %%i in (*.jpg *.png *.jpeg) do (
    magick "%%i" -bordercolor black -border 10x10 "output\%%i"
    echo 已处理: %%i
)
pause

Linux/macOS (bash)

#!/bin/bash
mkdir -p output
for img in *.jpg *.png *.jpeg; do
    if [ -f "$img" ]; then
        # 添加10像素黑色边框
        convert "$img" -bordercolor black -border 10x10 "output/$img"
        echo "已处理: $img"
    fi
done

边框样式示例

# 白色边框
convert input.jpg -bordercolor white -border 15x15 output.jpg
# 3像素红色边框
convert input.jpg -bordercolor "#FF0000" -border 3x3 output.jpg
# 圆角边框
convert input.jpg -bordercolor black -border 10x10 -border 10x10 output.jpg
# 阴影效果边框
convert input.jpg -bordercolor "#808080" -border 5x5 -bordercolor white -border 15x15 output.jpg

方法2:使用 Python + Pillow

from PIL import Image, ImageOps
import os
def add_border(input_path, output_path, border_size=10, border_color='black'):
    img = Image.open(input_path)
    img_with_border = ImageOps.expand(img, border=border_size, fill=border_color)
    img_with_border.save(output_path)
def batch_add_border(input_dir, output_dir, border_size=10, border_color='black'):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    supported_formats = ('.jpg', '.jpeg', '.png', '.bmp')
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(supported_formats):
            input_path = os.path.join(input_dir, filename)
            output_path = os.path.join(output_dir, filename)
            try:
                add_border(input_path, output_path, border_size, border_color)
                print(f"已处理: {filename}")
            except Exception as e:
                print(f"处理失败 {filename}: {e}")
# 使用示例
batch_add_border(
    input_dir='./images',
    output_dir='./images_with_border',
    border_size=20,
    border_color='#333333'  # 深灰色
)

方法3:使用 Python + OpenCV

import cv2
import os
def add_border_opencv(input_path, output_path, border_size=10, border_color=(0,0,0)):
    img = cv2.imread(input_path)
    # OpenCV使用BGR颜色空间
    border_color_bgr = border_color if len(border_color) == 3 else (255,255,255)
    img_with_border = cv2.copyMakeBorder(
        img, 
        border_size, border_size, border_size, border_size,
        cv2.BORDER_CONSTANT,
        value=border_color_bgr
    )
    cv2.imwrite(output_path, img_with_border)
def batch_process(input_dir, output_dir, border_size=10, border_color=(0,0,0)):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            input_path = os.path.join(input_dir, filename)
            output_path = os.path.join(output_dir, filename)
            try:
                add_border_opencv(input_path, output_path, border_size, border_color)
                print(f"已处理: {filename}")
            except Exception as e:
                print(f"处理失败 {filename}: {e}")
# 使用示例
batch_process(
    input_dir='./images',
    output_dir='./bordered_images',
    border_size=15,
    border_color=(255, 255, 255)  # 白色
)

方法4:使用 Photoshop 批处理

如果你有 Photoshop,可以创建动作来批量处理:

  1. 创建动作

    • 打开一张图片
    • 窗口 > 动作,创建新动作
    • 选择 > 全部
    • 编辑 > 描边(设置边框参数)
    • 停止录制
  2. 批处理

    • 文件 > 自动 > 批处理
    • 选择刚创建的动作
    • 选择源文件夹
    • 选择目标文件夹
    • 点击确定

方法5:使用在线工具(小图片)

对于小批量处理,可以使用:

批量处理脚本(高级版)

这是一个更完整的 Python 脚本,支持多种边框样式:

from PIL import Image, ImageOps, ImageFilter
import os
import argparse
class ImageBorderAdder:
    def __init__(self, style='simple', border_size=10, border_color='black', 
                 shadow=False, round_corners=0):
        self.style = style
        self.border_size = border_size
        self.border_color = border_color
        self.shadow = shadow
        self.round_corners = round_corners
    def add_border(self, img_path, output_path):
        img = Image.open(img_path)
        # 添加圆角
        if self.round_corners > 0:
            mask = Image.new('L', img.size, 0)
            mask_draw = ImageDraw.Draw(mask)
            mask_draw.rounded_rectangle(
                [(0,0), img.size], 
                radius=self.round_corners, 
                fill=255
            )
            img.putalpha(mask)
        # 添加边框
        if self.style == 'double':
            img = ImageOps.expand(img, border=self.border_size, fill=self.border_color)
            img = ImageOps.expand(img, border=self.border_size//2, fill='white')
        elif self.style == 'shadow':
            img_with_border = ImageOps.expand(img, border=self.border_size, fill=self.border_color)
            # 添加阴影效果
            shadow = ImageOps.expand(img, border=self.border_size+5, fill='black')
            shadow = shadow.filter(ImageFilter.GaussianBlur(5))
            shadow.paste(img_with_border, (0,0), img_with_border)
            img = shadow
        else:
            img = ImageOps.expand(img, border=self.border_size, fill=self.border_color)
        img.save(output_path)
# 使用命令行参数
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='批量添加图片边框')
    parser.add_argument('input_dir', help='输入文件夹路径')
    parser.add_argument('output_dir', help='输出文件夹路径')
    parser.add_argument('--size', type=int, default=10, help='边框大小(像素)')
    parser.add_argument('--color', default='black', help='边框颜色')
    parser.add_argument('--style', default='simple', 
                       choices=['simple', 'double', 'shadow'], 
                       help='边框样式')
    parser.add_argument('--round', type=int, default=0, help='圆角半径(像素)')
    args = parser.parse_args()
    adder = ImageBorderAdder(
        style=args.style,
        border_size=args.size,
        border_color=args.color,
        round_corners=args.round
    )
    if not os.path.exists(args.output_dir):
        os.makedirs(args.output_dir)
    for filename in os.listdir(args.input_dir):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp', '.tiff')):
            input_path = os.path.join(args.input_dir, filename)
            output_path = os.path.join(args.output_dir, filename)
            try:
                adder.add_border(input_path, output_path)
                print(f"✓ 已处理: {filename}")
            except Exception as e:
                print(f"✗ 处理失败 {filename}: {e}")

使用建议

  1. 小批量(<10张):使用 Photoshop 动作或在线工具
  2. 大批量简单边框:使用 ImageMagick 命令
  3. 需要复杂效果:使用 Python 脚本
  4. 跨平台需求:Python 方案最通用

选择最适合你需求的方法即可!

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