|
| 1 | +;; apply-layer-skip-color.scm |
| 2 | +;; Author: a198h |
| 3 | +;; Repository: https://github.com/a198h/gimp-apply-layer-skip-color |
| 4 | +;; Applique le calque "logo-layer" sur tous les calques, |
| 5 | +;; sauf ceux tagués avec la couleur choisie |
| 6 | + |
| 7 | +(define (apply-layer-skip-color image logo-layer skip-color) |
| 8 | + (let* ( |
| 9 | + (layers-info (gimp-image-get-layers image)) |
| 10 | + (layers-array (cadr layers-info)) |
| 11 | + (num-layers (car layers-info)) |
| 12 | + (i 0) |
| 13 | + ;; Correspondance des couleurs avec les valeurs GIMP 2.10 |
| 14 | + (color-values (list 0 6 1 2 3 4 5 7 8)) ; Aucune, Rouge, Orange, Jaune, Vert, Bleu, Violet, Gris, Noir |
| 15 | + (skip-tag (list-ref color-values skip-color)) |
| 16 | + ) |
| 17 | + (gimp-image-undo-group-start image) |
| 18 | + ;; Copie unique du contenu du calque logo |
| 19 | + (gimp-edit-copy logo-layer) |
| 20 | + (while (< i num-layers) |
| 21 | + (let* ((current-layer (aref layers-array i)) |
| 22 | + ;; Selon le PDB, ceci renvoie un entier; (car ...) est sûr si une liste est renvoyée |
| 23 | + (tag (let ((t (gimp-item-get-color-tag current-layer))) |
| 24 | + (if (list? t) (car t) t)))) |
| 25 | + (if (and |
| 26 | + (not (= current-layer logo-layer)) ; ne pas traiter le logo lui-même |
| 27 | + (not (= tag skip-tag))) ; ignorer les calques avec la couleur choisie |
| 28 | + (begin |
| 29 | + (gimp-image-set-active-layer image current-layer) |
| 30 | + (gimp-floating-sel-anchor (car (gimp-edit-paste current-layer 0)))))) |
| 31 | + (set! i (+ i 1))) |
| 32 | + (gimp-image-undo-group-end image) |
| 33 | + (gimp-displays-flush) |
| 34 | + (gimp-message "Calque appliqué partout (calques marqués ignorés).") |
| 35 | + ) |
| 36 | +) |
| 37 | + |
| 38 | +(script-fu-register |
| 39 | + "apply-layer-skip-color" |
| 40 | + "Apply Layer (skip color)" |
| 41 | + "Applies the active layer to all other layers except those with the chosen color tag." |
| 42 | + "a198h" |
| 43 | + "Copyright (C) 2025 a198h - GPL v3" |
| 44 | + "2025" |
| 45 | + "RGB*, GRAY*" |
| 46 | + SF-IMAGE "Image" 0 |
| 47 | + SF-DRAWABLE "Layer" 0 |
| 48 | + SF-OPTION "Skip" '("None" "Red" "Orange" "Yellow" "Green" "Blue" "Violet" "Gray" "Black")) |
| 49 | + |
| 50 | +(script-fu-menu-register "apply-layer-skip-color" "<Image>/Filters/Mes scripts") |
0 commit comments