linux

Linux GIMP脚本编写入门指南

小樊
54
2025-09-26 21:48:33
栏目: 智能运维

Linux GIMP脚本编写入门指南

一、GIMP脚本的核心类型

GIMP支持两种主要的脚本语言,适用于不同需求的用户:

  1. Script-Fu:基于Scheme语言的内置脚本接口,默认安装且无需额外配置,适合简单的图像处理任务(如批量调整大小、添加滤镜)。
  2. Python-Fu:基于Python的官方扩展接口,功能更强大,支持复杂的逻辑(如批量处理目录、调用外部库),适合有编程基础的用户。

二、准备工作:环境配置

  1. 安装GIMP:确保系统已安装GIMP(Ubuntu/Debian可通过sudo apt install gimp安装)。
  2. 确认脚本目录
    • Script-Fu脚本默认存放在~/.config/GIMP/2.10/scripts/(替换2.10为你的GIMP版本)。
    • Python-Fu脚本默认存放在~/.config/GIMP/2.10/plug-ins/
  3. 启用Python-Fu插件:打开GIMP→编辑→首选项→插件,勾选“Python-Fu”以激活插件。

三、Script-Fu入门:从Hello World到简单批处理

1. 编写第一个Script-Fu脚本

创建一个新文件(如hello.scm),输入以下内容:

(define (hello-world)
  (gimp-message "Hello, GIMP Scripting World!")
)

将文件保存到scripts目录,重启GIMP后,在顶部菜单→滤镜→Script-Fu→脚本中找到“Hello World”,点击即可看到消息框。

2. 简单图像处理示例:添加黑色边框

以下脚本将加载图像,添加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)                                             ; 删除图像对象(释放内存)
  )
)

将脚本保存到scripts目录,重启GIMP后,在滤镜→Script-Fu→脚本中找到“Add Black Border”,输入图像路径(如test.jpg)即可运行。

四、Python-Fu进阶:批量处理与复杂逻辑

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()

将脚本保存为batch_convert.py,放到plug-ins目录,重启GIMP后,在顶部菜单→Xtns→Languages→Python-Fu→Batch Convert JPG to PNG,选择输入/输出目录即可运行。

五、实用技巧与注意事项

  1. 备份原始文件:批处理前务必备份原图像,避免操作失误导致数据丢失。
  2. 测试脚本:先在小批量图像上测试脚本,确认无误后再处理大量文件。
  3. 内存管理:处理大图像时,使用(gimp-image-delete image)及时释放内存,避免程序卡顿。
  4. 调试技巧:在Script-Fu控制台(滤镜→Script-Fu→控制台)中逐行执行代码,查看变量值和错误信息。
  5. 查找函数:使用Filters→Script-Fu→Browse Procedures(或pdb.gimp_procedural_db_dump(1))查看所有可用函数及其参数。

通过以上步骤,你可以快速掌握GIMP脚本编写的基础,实现图像处理的自动化。根据需求选择Script-Fu(简单任务)或Python-Fu(复杂任务),逐步扩展功能。

0
看了该问题的人还看了