Скрипт водяных знаков в GIMP - PullRequest
0 голосов
/ 20 апреля 2020

Я хотел бы написать простой скрипт, который: 1) уменьшает изображение на 25% (ширина 50%, высота 50%), 2) добавляет водяной знак из другого изображения (наконец, я хотел бы установить непрозрачность для этого 20%).

Моя проблема в том, что я не совсем понимаю, что я делаю со слоями, которые я создаю. Скрипт работает (но было сложно заставить его работать!) Для группы файлов, я меняю параметры, но, кажется, я не могу заставить его работать так, как я хочу). Я не вижу изображения водяного знака - кроме случаев, когда я делаю gimp-file-save для drawable2 (тогда есть только водяной знак).

Кто-нибудь может мне помочь с этим? - и объясните мне, что я здесь не так делаю?

 (define (add-watermark2 pattern waterm)


  (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-active-drawable image)))
              (cur-width  (car (gimp-image-width image)))
              (cur-height (car (gimp-image-height image)))
              (width      (* 0.50 cur-width))
              (height     (* 0.50 cur-height))

              (gimp-image-scale image width height)   ; scale the image    

              (drawable2  (car (gimp-file-load-layer RUN-NONINTERACTIVE  image waterm)))
              (gimp-image-insert-layer image drawable2 0 -1) 
              (gimp-layer-set-offsets drawable2 100 100 )
              (gimp-layer-set-mode drawable2 0)
                (gimp-image-merge-visible-layers image 2)
          )

      (gimp-file-save   RUN-NONINTERACTIVE image drawable (string-append "w" filename) "")
  )
  (set! filelist (cdr filelist)) 
)))   

1 Ответ

0 голосов
/ 20 апреля 2020

Операция «сохранить» в однослойных форматах в Gimp API применяется к «рисуемым» (обычно это слой). Таким образом, чтобы экспортировать ваше изображение, вы должны сделать слой, который представляет все изображение. Это то, что вы делаете с (gimp-image-merge-visible-layers image 2), но вы не используете слой, возвращаемый этим вызовом в вызове (gimp-file-save ...).

При этом для таких операций ImageMagick лучше / быстрее, чем Gimp, поскольку он предназначен для запуска из сценариев оболочки.

...