GIMP支持两种主要的脚本语言,适用于不同需求的用户:
sudo apt install gimp安装)。~/.config/GIMP/2.10/scripts/(替换2.10为你的GIMP版本)。~/.config/GIMP/2.10/plug-ins/。创建一个新文件(如hello.scm),输入以下内容:
(define (hello-world)
(gimp-message "Hello, GIMP Scripting World!")
)
(define (函数名 参数) ...):定义函数,hello-world是无参函数。(gimp-message "文本"):弹出消息框显示内容。将文件保存到scripts目录,重启GIMP后,在顶部菜单→滤镜→Script-Fu→脚本中找到“Hello World”,点击即可看到消息框。
以下脚本将加载图像,添加2像素的黑色边框并保存为新文件:
(define (add-black-border filename)
(let* (
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) ; 加载图像
(drawable (car (gimp-image-get-active-layer image))) ; 获取活动层
(width (car (gimp-image-width image))) ; 获取图像宽度
(height (car (gimp-image-height image))) ; 获取图像高度
(new-width (+ width 4)) ; 新宽度(左右各加2像素)
(new-height (+ height 4)) ; 新高度(上下各加2像素)
)
(gimp-image-resize image new-width new-height 2 2) ; 调整图像大小(留出边框空间)
(gimp-selection-all image) ; 全选图像
(gimp-selection-shrink image 2) ; 收缩选区2像素(保留中间部分)
(gimp-context-set-foreground '(0 0 0)) ; 设置前景色为黑色
(gimp-edit-fill drawable BUCKET-FILL-FG) ; 用前景色填充选区(形成边框)
(gimp-selection-none image) ; 取消选区
(gimp-file-save RUN-NONINTERACTIVE image drawable (string-append "bordered_" filename) (string-append "bordered_" filename)) ; 保存为新文件
(gimp-image-delete image) ; 删除图像对象(释放内存)
)
)
(let* (...)):定义局部变量(如image、drawable),仅在函数体内有效。(gimp-image-resize):调整图像尺寸,最后一个参数为偏移量(避免裁剪原图像)。(gimp-selection-shrink):收缩选区,用于创建边框效果。将脚本保存到scripts目录,重启GIMP后,在滤镜→Script-Fu→脚本中找到“Add Black Border”,输入图像路径(如test.jpg)即可运行。
Python-Fu支持更灵活的操作,以下示例展示如何批量将JPEG转换为PNG并调整大小:
#!/usr/bin/env python
from gimpfu import *
def batch_convert_jpg_to_png(input_folder, output_folder):
# 确保输出目录存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入目录中的所有JPEG文件
for filename in os.listdir(input_folder):
if filename.lower().endswith('.jpg') or filename.lower().endswith('.jpeg'):
# 构建完整文件路径
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, os.path.splitext(filename)[0] + '.png')
# 加载图像
image = pdb.gimp_file_load(input_path, input_path)
drawable = pdb.gimp_image_get_active_layer(image)
# 调整大小为800x600(保持比例)
pdb.gimp_image_scale(image, 800, 600)
# 保存为PNG格式(质量设为90%)
pdb.file_png_save(image, drawable, output_path, output_path, 0, 9, 1, 1, 1, 1)
# 删除图像对象(释放内存)
pdb.gimp_image_delete(image)
# 注册脚本(使其出现在GIMP菜单中)
register(
"python_fu_batch_convert_jpg_to_png", # 函数名
"Batch convert JPG to PNG and resize", # 描述
"Convert all JPG files in a folder to PNG, resize to 800x600", # 帮助
"Your Name", "Your Name", "2025", # 作者、版权、日期
"<Toolbox>/Xtns/Languages/Python-Fu/Batch Convert JPG to PNG", # 菜单路径
"", # 图像类型(空表示支持所有类型)
[ # 参数
(PF_DIRNAME, "input_folder", "Input Folder", None),
(PF_DIRNAME, "output_folder", "Output Folder", None),
],
[], # 结果(无)
batch_convert_jpg_to_png # 主函数
)
# 启动脚本
main()
os.listdir():遍历目录中的文件。pdb.gimp_file_load():加载图像。pdb.gimp_image_scale():调整图像大小。pdb.file_png_save():保存为PNG格式(参数依次为:图像、图层、输出路径、文件名、压缩级别、质量、是否交错、是否保存alpha通道)。将脚本保存为batch_convert.py,放到plug-ins目录,重启GIMP后,在顶部菜单→Xtns→Languages→Python-Fu→Batch Convert JPG to PNG,选择输入/输出目录即可运行。
(gimp-image-delete image)及时释放内存,避免程序卡顿。Filters→Script-Fu→Browse Procedures(或pdb.gimp_procedural_db_dump(1))查看所有可用函数及其参数。通过以上步骤,你可以快速掌握GIMP脚本编写的基础,实现图像处理的自动化。根据需求选择Script-Fu(简单任务)或Python-Fu(复杂任务),逐步扩展功能。