如何批量为图片添加边框并覆盖原图

TLDR: 使用 ImageMagick 在命令行批量处理图片,添加边框并覆盖原图。

  • ImageMagick: 一个强大的图像处理工具,支持多种格式和操作。
    • 安装方法:
      • Linux: sudo apt-get install imagemagick
      • macOS: brew install imagemagick
      • Windows: 从 ImageMagick 官方网站 下载安装包。
    • 使用方法:
      • 单张图片添加边框:convert input.jpg -bordercolor white -border 10x10 output.jpg
      • 批量处理并覆盖原图:
        setopt nullglob
        for file in *.{jpg,png,gif,jpeg}; do
        convert "$file" -bordercolor white -border 10x10 "$file"
        done
        
  • 注意事项:
    • 备份原图:在执行覆盖操作前,请确保备份重要图片,以防覆盖后无法恢复。
    • 文件格式:根据需要处理的图片格式,调整 *.{jpg,png,gif,jpeg} 中的扩展名。
    • 边框颜色和宽度:可以根据需要修改 -bordercolor-border 的值。

批量给文件降质到 1M 并重命名

以下脚本会遍历当前目录下所有 jpg, jpeg, png, webp 格式的图片, 将每张图片压缩到不超过 1MB (1024KB) , 并自动覆盖原文件. 压缩时会逐步降低图片质量, 最低降到 10. 请确保已安装 ImageMagick (magick 命令可用) , 并提前备份重要图片.

  • 支持多种图片格式, 自动跳过不存在的文件.
  • 采用迭代方式压缩, 优先保证图片质量.
  • 压缩失败时会有提示, 最终会覆盖原图.
  • 脚本结束后会自动清理临时文件.
#!/bin/bash

target_size_kb=1024
min_quality=10
formats=("jpg" "jpeg" "png" "webp")

# 遍历所有支持的图片格式
for ext in "${formats[@]}"; do
  for file in *."$ext"; do
    [ -e "$file" ] || continue  # 跳过不存在的文件匹配

    tmpfile="temp_compressed.${file##*.}"
    quality=90

    # 压缩迭代直到小于目标大小或降到最低质量
    while [ $quality -ge $min_quality ]; do
      magick "$file" -quality $quality "$tmpfile" 2>/dev/null
      actual_size_kb=$(du -k "$tmpfile" | cut -f1)

      if [ "$actual_size_kb" -le "$target_size_kb" ]; then
        break
      fi

      quality=$((quality - 5))
    done

    # 检查是否压缩成功
    if [ $quality -lt $min_quality ]; then
      echo "⚠️  $file 无法压缩到 ${target_size_kb}KB 以下,保留最低质量 $quality"
    fi

    # 覆盖原文件
    mv "$tmpfile" "$file"
    echo "✅ $file 已压缩 (quality=$quality, size=${actual_size_kb}KB)"
  done
done

# 清理残留的临时文件(如有)
[ -f "$tmpfile" ] && rm -f "$tmpfile"