温馨提示×

Ubuntu GIMP批处理操作方法

小樊
34
2025-12-12 05:48:59
栏目: 智能运维

Ubuntu 下使用 GIMP 进行批处理的三种高效方式


一 使用 BIMP 插件图形化批处理(推荐)

  • 安装与准备
    • 在终端安装编译依赖与插件(以 Ubuntu/Debian 为例):
      • sudo apt-get update
      • sudo apt-get install -y libgimp2.0-dev libgegl-dev
    • 获取 BIMP(Batch Image Manipulation Plugin)源码并编译安装(示例):
      • git clone https://gitcode.com/gh_mirrors/gi/gimp-plugin-bimp
      • cd gimp-plugin-bimp && make && sudo make install
    • 重启 GIMP,在菜单中可见:文件 → Batch Image Manipulation(BIMP)
  • 快速上手
    • 添加图片:点击 Add images 选择多张待处理图片。
    • 构建流程:在 Operations 中按需添加多个操作(可组合),例如:
      • 调整大小(像素或百分比,支持保持宽高比)
      • 添加水印(建议用带透明通道的 PNG,通过相对位置适配不同分辨率)
      • 格式转换(如 JPEG/PNG/TIFF/WebP 等)
      • 色彩校正、锐化、裁剪、旋转
    • 预设与重命名
      • 将常用流程保存为 预设,下次一键加载复用。
      • 使用强大的 批量重命名:如 {originalname}{counter}{date}{time} 等变量组合,规范输出文件名。
    • 执行与日志
      • 先对少量样本测试,确认无误再处理全部。
      • 处理过程中会生成 日志,便于定位哪张图片在哪一环节出错。
    • 小贴士
      • 超大量图片建议分批处理,减少卡顿与内存占用。

二 使用命令行脚本批量处理(无界面、可自动化)

  • 方式 A:使用 gimp-console(无界面)执行 Script-Fu 或 Python-Fu
    • 典型流程:
      • 准备脚本(如 Scheme/Python),实现加载图像、执行处理、保存输出的过程。
      • 终端执行(示例):
        • gimp-console -i -b ‘(batch-process “input.jpg” “output.png”)’ -b ‘(gimp-quit 0)’
      • 说明:
        • -i 无界面模式;-b 执行一段脚本;gimp-quit 0 正常退出。
        • 脚本中可调用 GIMP 的 PDB(Procedural Database) 过程完成缩放、格式转换、导出等。
  • 方式 B:使用 Python-Fu 编写更复杂的批处理逻辑
    • 将脚本保存到 GIMP 插件目录(如 ~/.gimp-2.x/plug-ins/,并赋予可执行权限),在 GIMP 中通过 文件 → 批处理 调用,或通过命令行无界面执行。
  • 方式 C:纯 Bash 循环 + gimp-console(适合简单任务)
    • 示例(批量将 JPGPNG):
      • for f in *.jpg; do gimp-console -i -b “(batch-convert-to-png "$f" "${f%.jpg}.png")” -b “(gimp-quit 0)”; done
    • 提示:
      • 复杂流程建议用 Python-FuScript-Fu 实现,便于维护与扩展。
      • 批处理前务必 备份原图,因为批量操作通常 不可一键撤销

三 常见任务脚本示例

  • 示例 1(Python-Fu,批量缩放并导出 JPEG)
    • 用途:将一批图片等比缩放到最大宽度 1280 像素,质量 90,输出到指定目录。
    • 保存为:~/.gimp-2.x/plug-ins/batch_resize.py(chmod +x)
      • from gimpfu import *
      • import os
      • def batch_resize(input_dir, output_dir, max_width=1280, quality=90):
        • for f in os.listdir(input_dir):
          • if not f.lower().endswith((‘.png’, ‘.jpg’, ‘.jpeg’)): continue
          • in_path = os.path.join(input_dir, f)
          • out_path = os.path.join(output_dir, f)
          • img = pdb.gimp_file_load(in_path, in_path)
          • w, h = img.width, img.height
          • if w > max_width:
            • new_h = int(h * max_width / w)
            • pdb.gimp_image_scale(img, max_width, new_h)
          • layer = pdb.gimp_image_get_active_layer(img)
          • pdb.file_jpeg_save(img, layer, out_path, out_path, quality, 0, 0, 0, “”, 0, 0, 0, 0)
          • pdb.gimp_image_delete(img)
        • register(
          • “python_fu_batch_resize”, “Batch Resize”, “Resize images”,
          • “Your Name”, “Your Name”, “2025”,
          • /File/Batch/Resize…”, “”,
          • [(PF_DIRNAME, “input_dir”, “Input folder”, “”), (PF_DIRNAME, “output_dir”, “Output folder”, “”), (PF_INT, “max_width”, “Max width”, 1280), (PF_INT, “quality”, “JPEG quality”, 90)],
          • [],
          • batch_resize)
        • main()
  • 示例 2(Script-Fu,批量添加水印)
    • 用途:将同一张 PNG 水印 叠加到一批图片右下角,透明度 50%,边距 10 像素
    • 保存为:~/.gimp-2.x/scripts/batch_watermark.scm
      • (define (batch-watermark in-dir out-dir watermark-path opacity margin)
        • (let* ((files (cadr (file-glob (string-append in-dir “/*.{jpg,jpeg,png}”) 1)))
          • (while (not (null? files))
            • (let* ((file (car files)) - (img (car (gimp-file-load RUN-NONINTERACTIVE file file))) - (layer (car (gimp-image-get-active-layer img))) - (wm (car (gimp-file-load RUN-NONINTERACTIVE watermark-path watermark-path))) - (wm-layer (car (gimp-layer-new-from-drawable wm img))) - (x (- (car (gimp-image-width img)) (car (gimp-drawable-width wm-layer)) margin)) - (y (- (car (gimp-image-height img)) (car (gimp-drawable-height wm-layer)) margin)))
              • (gimp-image-insert-layer img wm-layer 0 -1)
              • (gimp-layer-set-opacity wm-layer opacity)
              • (gimp-layer-set-mode wm-layer LAYER-MODE-OVERLAY) ; 也可用 NORMAL 并配合透明度
              • (gimp-file-save RUN-NONINTERACTIVE img layer
                • (string-append out-dir “/” (car (last (str-split file #/))))
                • (car (last (str-split file #/))))
              • (gimp-image-delete img)
              • (gimp-image-delete wm))
            • (set! files (cdr files)))))
      • (batch-watermark “/path/in” “/path/out” “/path/watermark.png” 50 10)
    • 命令行执行:
      • gimp-console -i -b ‘(batch-watermark “/path/in” “/path/out” “/path/watermark.png” 50 10)’ -b ‘(gimp-quit 0)’

四 实用建议与替代工具

  • 何时选择 BIMP
    • 需要 图形化多步骤组合预设复用批量重命名日志 的场景,BIMP 最省时省力。
  • 何时选择脚本
    • 需要 无人值守与 CI/CD 或定时任务集成、或 复杂条件逻辑 的场景,使用 gimp-console + Script-Fu/Python-Fu 更灵活。
  • 何时考虑非 GIMP 工具
    • 纯格式转换、缩放、压缩等 高吞吐 任务,优先考虑 ImageMagick
      • 示例:convert *.jpg -resize 50% output_%d.jpg
    • 可与 GIMP 搭配:先用 ImageMagick 做预处理,再用 GIMP 做高质量滤镜或合成。

0