You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GIMP精灵表打包脚本报错:gimp-layer-translate参数1类型无效

问题分析与解决

错误根源

你遇到的Invalid type for argument 1 to gimp-layer-translate错误,核心是语法错误导致没有正确获取图层ID:

  • 原代码中(layer car(layers))是错误的Scheme语法,Scheme函数调用必须用(函数 参数)的形式,这里car是函数,layers是参数,正确写法是(layer (car layers))。
  • 循环的if语句多了一个闭合括号:(if (&lt; i 14))应该改成(if (< i 14),否则语法解析会出错,导致后续逻辑混乱。
  • 当循环到图层数量不足时,(car layers)会取空列表的头部,得到#f(布尔值假),而不是有效的图层ID,这也会触发类型错误。

修正步骤

  1. 修复图层获取语法
    把(layer car(layers))改为(layer (car layers)),确保正确提取列表中的第一个图层ID。

  2. 修正循环条件的语法错误
    原代码的if语句多了闭合括号,改为:

    (if (and (< i 14) (not (null? layers)))
    

    增加(not (null? layers))是为了避免图层数量不足时,尝试获取空列表的头部导致错误。

  3. 其他细节修正

    • 原代码中(set! layers (cdr(layers)))同样要修正为(set! layers (cdr layers)),保持Scheme函数调用的正确格式。

修正后的完整代码

(define pack-sprites
  (let* (
         (cols 5)
         (rows 3)
         (sprite_width 750)
         (sprite_height 1026)
         (image (car (vector->list (cadr (gimp-image-list)))))
         (layers (vector->list (cadr (gimp-image-get-layers image))))
         )
    (let loop ((i 0))
      (if (and (< i 14) (not (null? layers)))
          (begin
            (let* (
                   (offx (* sprite_width (modulo i cols)))
                   (offy (* sprite_height (floor (/ i cols))))
                   (layer (car layers))
                   )
              (gimp-layer-translate layer offx offy)
              (set! layers (cdr layers))
              (loop (+ i 1))
              )
          )
      )
    )
)

(script-fu-register
    "pack-sprites"
    "<Image>/Tools/pack sprites"
    "pack layers into spritesheet"
    "plugnpi"
    "plugnpi"
    "March 2025"
    "RGB*, GRAY*"
)

验证方法

保存修正后的脚本,在GIMP中执行Filters > Script-Fu > Refresh Scripts,然后打开包含多个图层的图像,运行Tools > pack sprites,检查图层是否正确排列成精灵表。

内容的提问来源于stack exchange,提问作者Ed Crap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:22:41