使用除非我的Script-Fu中的指令阻止其运行

问题描述 投票:0回答:2

以下脚本旨在通过Gimp CLI界面调用,它将当前目录中所有PNG的颜色模式更改为索引:

(define (script-fu-batch-indexify 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-get-active-layer image))))
        (gimp-image-convert-indexed image NO-DITHER MAKE-PALETTE 256 0 0 "")
        (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
        (gimp-image-delete image))
      (set! filelist (cdr filelist)))))

此脚本运行良好,但是它要求当前目录中的每个PNG都没有索引。找到索引的PNG时,它将立即中止。我的意图是使其跳过索引PNG。我相信最好的方法是这样的:

(define (script-fu-batch-indexify pattern num-cols)
  (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-get-active-layer image))))
        (unless (gimp-drawable-is-indexed image) ; Now it does not work anymore...
          (gimp-image-convert-indexed image NO-DITHER MAKE-PALETTE num-cols 0 0 "")
          (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
          (gimp-image-delete image)))
      (set! filelist (cdr filelist)))))

但是这样做会阻止脚本运行!它执行没有任何错误,也没有索引任何未索引的PNG。我尝试使用if,但结果相同。那么,我在这里出错了吗?

((我在Linux Mint 19.3上使用Gimp 2.8.22,]

scheme gimp script-fu
2个回答
1
投票

该脚本未按照通常编写Scheme的方式进行编码:我们尽力避免使用set!操作,可以使用递归而不是while循环来实现您所做的工作-在函数式编程风格中,这就是推荐方式。

话虽如此,我看不到您的代码有任何明显的缺陷,您确定此表达式对于任何图像而言实际上都是错误的吗?

(gimp-drawable-is-indexed image)

尝试在unless表达式之前打印上述结果,然后看看它显示的内容。从终端启动Gimp并查看控制台:

(print (gimp-drawable-is-indexed image))
(unless (gimp-drawable-is-indexed image)

0
投票

使用这样的打印:

(display (string-append "\n Indexed:" (number->string (car (gimp-drawable-is-indexed drawable))) "< \n"))
  1. 您必须为(display ..)创建一个字符串

    首先在PDB中查找gimp-drawable-is-indexed,返回int32=> [(数字->字符串]但是所有返回列表的函数=> [(car(..]

  2. (gimp-drawable-is-indexed .)需要一层而不是图像。

© www.soinside.com 2019 - 2024. All rights reserved.