用script-fu实现gimp批处理

  • Posted on
  • by

Gimp是开源的图像处理工具。利用gimp除了可以进行一般的图片处理工作,比如对图片修饰、裁剪等工作,还可以进行图片的批量处理。Gimp所提供的功能可以通过调用script-fu编写的函数实现。Script-Fu采用SIOD (Scheme In One Defun)作为解释器,类似于windows下面的宏,可以进行批量工作。

也就是说,通过调用gimp提供的函数,而不是直接在程序的图形界面上进行操作,从而实现图像处理自动化。

以下简单介绍用script-fu实现图片批处理的一般步骤,操作平台为linux或者unix,脚本可以实现将tif格式的图片转换成同名的gif和jpg格式的图片。本脚本在gimp-2.0和gimp-2.2下调试通过。

1 编写脚本。

将脚本存为batch-pic2min.scm。其中gimp内置函数的命令和参数可以通过procedure browser查找,路径为:Xtns=>procedure browser。
(define (batch-pic2min pattern)
(set! filename pattern)
(set! image (car (gimp-file-load 1 filename filename)))
(set! picname (strbreakup filename "."))
(set! picname (unbreakupstr (butlast picname ".")))
(set! jpgname (string-append picname ".jpg"))
(set! gifname (string-append picname ".gif"))
(set! drawable (car (gimp-image-flatten image)))
(file-jpeg-save 1 image drawable jpgname jpgname 0.85 0 1 1 "No comment!" 2 1 0 0)
(gimp-image-convert-indexed image FS-DITHER MAKE-PALETTE 255 FALSE FALSE "")
(gimp-file-save 1 image drawable gifname gifname)
(gimp-image-delete image)

2 将batch-pic2min.scm保存在gimp设置目录~/.gimp-2.0/scripts下面(针对gimp-2.0版本),对于gimp-2.2版,存放路径为~/.gimp-2.2/scripts。

3 调用脚本。比如要把名为sample.tif的图片转换成sample.gif和sample.jpg,可以在命令提示符下,调用gimp:

$ gimp -i -b '(batch-pic2min "sample.tif")' '(gimp-quit 0)'

结合shell脚本调用就可以实现批量修改图片格式的目的。