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(适合简单任务)
- 示例(批量将 JPG 转 PNG):
- for f in *.jpg; do
gimp-console -i -b “(batch-convert-to-png "$f" "${f%.jpg}.png")” -b “(gimp-quit 0)”;
done
- 提示:
- 复杂流程建议用 Python-Fu 或 Script-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 做高质量滤镜或合成。