在 Debian 下使用 GIMP 进行批处理,常见有几种方式,从简单到灵活依次如下:
GIMP 支持在无界面模式下运行 Scheme 脚本(Script-Fu)。
gimp -i -b '(script-fu-your-batch "参数")' -b '(gimp-quit 0)'
参数说明:
-i:无界面(no interface)-b:执行批处理脚本(gimp-quit 0)gimp -i -b '(batch-convert "*.png")' -b '(gimp-quit 0)'
但 GIMP 默认没有 batch-convert,需要自己写 Script-Fu:
batch.scm)(define (batch-convert pattern)
(let* ((filelist (cadr (file-glob pattern 1))))
(while (not (null? filelist))
(let* ((filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)))
(newname (string-append (substring filename 0 (- (string-length filename) 4)) ".jpg")))
(gimp-file-save RUN-NONINTERACTIVE image drawable newname newname)
(gimp-image-delete image))
(set! filelist (cdr filelist)))))
放入:
~/.config/GIMP/2.10/scripts/
然后运行:
gimp -i -b '(batch-convert "*.png")' -b '(gimp-quit 0)'
如果你熟悉 Python,Python-Fu 更强大。
Debian 默认 GIMP 包含:
gimp-python
保存为 batch_resize.py:
from gimpfu import *
def batch_resize(pattern, width):
files = pdb.file_glob(pattern, 1)[1]
for f in files:
img = pdb.gimp_file_load(f, f)
pdb.gimp_image_scale(img, width, int(width * img.height / img.width))
layer = pdb.gimp_image_merge_visible_layers(img, CLIP_TO_IMAGE)
pdb.gimp_file_save(img, layer, f, f)
pdb.gimp_image_delete(img)
register(
"batch_resize",
"Batch resize",
"Batch resize images",
"You",
"GPL",
"2024",
"",
"",
[(PF_STRING, "pattern", "File pattern", "*.jpg"),
(PF_INT, "width", "New width", 800)],
[],
batch_resize)
main()
运行:
gimp -i -b '(python-fu-batch-resize RUN-NONINTERACTIVE "*.jpg" 800)' -b '(gimp-quit 0)'
如果你只是:
更推荐直接用命令行工具:
# 批量缩放
mogrify -resize 800x ImageMagick
# 批量转换
convert *.png output_%03d.jpg
或:
# 批量处理(推荐)
parallel convert {} {.}.jpg ::: *.png
| 需求 | 推荐方式 |
|---|---|
| 简单格式转换 | ImageMagick |
| 复杂 GIMP 操作 | Script-Fu / Python-Fu |
| 自动化脚本 | Python-Fu + bash |
| 不想写脚本 | GIMP 插件(如 Bimp) |
如果你愿意,可以告诉我:
gimp --version)我可以直接给你可运行的脚本。