SF-FILENAME argument

Hi, all!

I’m struggling to get this script-fu registered. Gimp says it´s expecting an integer value for the SF-FILENAME default argument.

Can you all help me find the real problem on my script? Thanks!

(define (ler-palavras-do-arquivo arquivo)
  (define (ler-linhas arquivo)
    (with-input-from-file arquivo
      (lambda ()
        (define linhas '())
        (define fim? (eof-object? (peek-char)))
        (begin
          (while (not fim?)
            (define linha (read-line))
            (set! linhas (append linhas (list linha)))))
        linhas)))
  (ler-linhas arquivo))

(define (centra-texto-na-imagem base-image arquivo)
  (let* (
         ; Lê as palavras do arquivo
         (palavras (ler-palavras-do-arquivo arquivo))

         ; Obtém as dimensões da imagem base
         (largura-base (car (gimp-image-width base-image)))
         (altura-base (car (gimp-image-height base-image)))

         ; Função para criar a imagem com a palavra e exportar para PNG
         (cria-imagem-com-palavra (lambda (palavra)
                                    (begin
                                      ; Cria uma nova camada de texto com a palavra
                                      (define texto-layer (car (gimp-text-fontname base-image
                                                                                    0 0
                                                                                    palavra
                                                                                    0 TRUE 105 "DTLProkyonTLight Medium")))

                                      ; Obtém as dimensões da camada de texto
                                      (define texto-largura (car (gimp-item-width texto-layer)))
                                      (define texto-altura (car (gimp-item-height texto-layer)))

                                      ; Calcula as novas coordenadas para centralizar o texto
                                      (define nova-x (- (/ largura-base 2) (/ texto-largura 2)))
                                      (define nova-y 167)

                                      ; Move o texto para o centro da imagem
                                      (gimp-item-transform-translate texto-layer nova-x nova-y)

                                      ; Adiciona a camada de texto à imagem base
                                      (gimp-image-insert-item base-image texto-layer 0)

                                      ; Atualiza a visualização
                                      (gimp-displays-flush)

                                      ; Define o nome do arquivo PNG para salvar
                                      (define arquivo-png (string-append palavra ".png"))

                                      ; Exporte a imagem para PNG
                                      (file-png-save2 base-image
                                                       (car (gimp-image-active-drawable base-image))
                                                       arquivo-png
                                                       arquivo-png
                                                       0 ; Não interativo
                                                       9 ; Qualidade máxima
                                                       TRUE ; Compressão automática
                                                       TRUE ; Excluir metadados
                                                       TRUE ; Interlaced
                                                       0 ; Não mostrar visualização
                                                       0 ; Não incluir a transparência
                                                       ))

                                      ; Deleta a camada de texto para preparar para a próxima palavra
                                      (gimp-item-delete texto-layer)))))

    ; Para cada palavra na lista de palavras lidas do arquivo, chama a função de criar imagem com a palavra
    (for-each cria-imagem-com-palavra palavras)

    ; Atualiza a exibição
    (gimp-displays-flush))
; Registro do script no GIMP para a versão 2.10.38
(script-fu-register
 "centra-texto-na-imagem"                         ; Nome do script
 "Centra texto na imagem"                        ; Título
 "Cria imagens com texto centralizado"            ; Descrição
 "Fabiano Duarte"                                      ; Autor
 "2024"                                          ; Data
 "Whatever"                                         ; Licença
 SF-IMAGE    "Imagem Base" 0                     ; Parâmetro de imagem (0 para imagem ativa)
 SF-FILENAME "Arquivo de Palavras" (string-append gimp-data-directory "") ; Parâmetro de arquivo de palavras (caminho padrão vazio)
)

; Registra o script no menu do GIMP
(script-fu-menu-register "centra-texto-na-imagem" "<Image>/Filters/Script-Fu")

No a script-fu expert, but AFAIK argument should be in a list and each argument descriptor is a list, so something like (untested):

(script-fu-register
 "centra-texto-na-imagem"                         ; Nome do script
 "Centra texto na imagem"                        ; Título
 "Cria imagens com texto centralizado"            ; Descrição
 "Fabiano Duarte"                                      ; Autor
 "2024"                                          ; Data
 "Whatever"                                         ; Licença
(
    ( SF-IMAGE    "Imagem Base" 0 )                    ; Parâmetro de imagem (0 para imagem ativa))
    ( SF-FILENAME "Arquivo de Palavras" (string-append gimp-data-directory "")) ; Parâmetro de arquivo de palavras (caminho padrão vazio)
)

And you probably need an empty list at the end for the return values.

Btw, “9” is not a quality index in PNG, it is just how much CPU time you are ready to waste.

Hi, Ofnuts.

Sorry. Multitasking.

I’ve tried your suggestion. No luck.

In fact, no scripts I’ve found used the list as a parameter to register.

Thank you, though.

You have not included the Copyright field in the register:

; Registro do script no GIMP para a versão 2.10.38
(script-fu-register
 "centra-texto-na-imagem"                         ; Nome do script
 "Centra texto na imagem"                        ; Título
 "Cria imagens com texto centralizado"            ; Descrição
 "copyright"
 "Fabiano Duarte"                                      ; Autor
 "2024"                                          ; Data
 ""                                         ; Licença
 SF-IMAGE    "Imagem Base" 0                     ; Parâmetro de imagem (0 para imagem ativa)
 SF-FILENAME "Arquivo de Palavras" (string-append gimp-data-directory "") ; Parâmetro de arquivo de palavras (caminho padrão vazio)
)

Outstanding!

Thank you.

PS: i just realized that some functions I used dont come with tinyscheme (the version of scheme supported by Gimp). Kinda frustrating.