;; --------------------------------------------------------- ;; * * ;; * Script-Fu Congelation v1.1 * ;; * * ;; * pour GIMP 2.0.x * ;; * * ;; * * ;; * abcdugimp.free.fr 03/10/2004 * ;; * * ;; --------------------------------------------------------- ;; Vous êtes libre d'utiliser ce script comme bon vous semble ;; feel free to use it for whatever you like. ; Version 1.2 : Raymond Ostertag ;; inverted lines ;; (gimp-image-add-channel image canal 0) ;; add channel ;; (gimp-edit-clear canal) ;; nettoyer le mask de canal ;; declarations ;; coordonnees de Courbe (define (spline-level) (let* ((a (cons-array 16 'byte))) (set-pt a 0 0 0) (set-pt a 1 32 80) (set-pt a 2 64 16) (set-pt a 3 96 130) (set-pt a 4 128 32) (set-pt a 5 160 176) (set-pt a 6 208 48) (set-pt a 7 255 255) a)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (script-fu-congelation-2 image drawable superpose active-s motif intense option seuil force transp ) ;; init generale (let* ( ;; conserver les outils dans des variables (old-bg (car (gimp-palette-get-background))) (old-fg (car (gimp-palette-get-foreground))) (old-pat (car (gimp-patterns-get-pattern))) ;; connaitre les dimensions de l'image (image-width (car (gimp-image-width image))) (image-height (car (gimp-image-height image))) ;; variable déterminant si il y a une sélection (var-select (car (gimp-selection-is-empty image))) ;; creation des calques (layer-diff (car (gimp-layer-new image image-width image-height RGBA-IMAGE "base pour difference" 100 NORMAL))) (layer-fond (car (gimp-layer-new image image-width image-height RGBA-IMAGE "Fond blanc" 100 NORMAL))) (layer-clair (car (gimp-layer-new image image-width image-height RGBA-IMAGE "gris clair" 100 NORMAL))) (layer-fonce (car (gimp-layer-new image image-width image-height RGBA-IMAGE "gris fonce" 100 NORMAL))) (layer (car (gimp-layer-new image image-width image-height RGBA-IMAGE "noir" 100 NORMAL))) ) ;; debut d'historique d'annulation (gimp-image-undo-group-start image) ;; add layer (gimp-image-add-layer image layer-diff -1) (gimp-image-add-layer image layer-fond -1) (gimp-image-add-layer image layer-clair -1) (gimp-image-add-layer image layer-fonce -1) (gimp-image-add-layer image layer -1) ;; options superpose (if (> superpose 0) (begin (set! intense TRUE) (set! option 1) (set! transp FALSE) ) ) (if (= superpose 3) (begin (set! intense FALSE) (set! option 0) (set! transp FALSE) ) ) ;; selections (gimp-layer-add-alpha drawable) ;; ajoute un canal alpha au calque (if (= var-select TRUE) ;; test si il y a selection (begin ;; aucune selection n'a été faite (gimp-edit-copy drawable) ;; copie (set! canal (car (gimp-channel-new image image-width image-height "Mask forme originel" 50 '(0 0 0)) )) ;; cree un nouveau canal (gimp-image-add-channel image canal 0) ;; add channel (gimp-edit-clear canal) ;; nettoyer le mask de canal (gimp-floating-sel-anchor(car (gimp-edit-paste canal 0))) ;; colle et ancre la selection flottante ) (begin ;; une selection a ete faite ;; crée un mask de canal d'après la selection de l'utilisateur (set! o-canal (car (gimp-selection-save image))) ;; canal stockant la selection originelle de l'utilisateur (gimp-selection-invert image) ;; inverser la selection pour harmoniser avec l'autre possibilité sans selection (set! canal (car (gimp-selection-save image))) (gimp-selection-none image) ;; desactive la selection ) ) ;; initialisations (gimp-palette-set-background '(224 223 227)) (gimp-palette-set-foreground '(170 170 185)) (gimp-patterns-set-pattern motif) ;; init calques ;; vider les calques pour qu'il n'y est pas de trace indesirable (gimp-edit-clear layer-fond) (gimp-edit-clear layer-clair) (gimp-edit-clear layer-fonce) (gimp-edit-clear layer) (gimp-edit-clear layer-diff) ;;----------------------------------------------------- ;; simulation du filtre photoshop "cristalisation = 7" ;;----------------------------------------------------- ;; claque gris fonce (gimp-selection-load canal) ;; canal vers selection (gimp-selection-invert image) ;; inverser la selection (script-fu-distress-selection image layer-fonce 127 8 4 2 TRUE TRUE) ;; perturbe la selection (gimp-edit-fill layer-fonce 0) ;; remplir la selection ;; claque gris clair (gimp-selection-load canal) ;; canal vers selection (gimp-selection-invert image) ;; inverser la selection (script-fu-distress-selection image layer-clair 127 10 4 2 TRUE TRUE) ;; perturbe la selection (gimp-edit-fill layer-clair 1) ;; remplir la selection ;; calque partie en noir (gimp-palette-set-foreground '(0 0 0)) (gimp-selection-load canal) ;; canal vers selection (gimp-selection-invert image) ;; inverser la selection (script-fu-distress-selection image layer 127 6 3 2 TRUE TRUE) ;; perturbe la selection (gimp-selection-shrink image 1) ;; reduire de 1 pixel (gimp-edit-fill layer 0) ;; remplir la selection ;; calque Fond (gimp-selection-none image) ;; deselectionner (gimp-palette-set-foreground '(255 255 255)) (gimp-edit-fill layer-fond 0) ;; remplir ;; fusionner les 4 calques (gimp-image-merge-down image layer-fonce 0) (set! base-layer (car (gimp-image-merge-down image layer 0))) ;; cree un canal en vue de l'eventuelle option difference (superpose) (gimp-selection-layer-alpha base-layer) ;; alpha vers selection (set! canal2 (car (gimp-selection-save image))) (gimp-selection-none image) ;; desactive la selection (set! new-layer (car (gimp-image-merge-down image base-layer 0))) (gimp-drawable-set-name new-layer "Effet congelation") ;;-------------------------------------------------- ;;----------------------------------------------------- ;; tronçon commun ;;----------------------------------------------------- (plug-in-gauss-rle2 1 image new-layer 2.0 2.0) ;; flou RLE (gimp-curves-spline new-layer 0 16 (spline-level)) ;; outil courbe (gimp-invert new-layer) ;; inverser les couleurs (gimp-desaturate new-layer) ;; desaturer (gimp-image-rotate image 2) ;; rotation 270 deg (if (> force 0) ;;(begin (if (= intense FALSE) (begin (plug-in-wind 1 image new-layer seuil 0 force 0 1)) ;; plug-in vent (begin (plug-in-wind 1 image new-layer seuil 0 force 0 0)) ;; plug-in vent - les 2 ) ;;) ) (gimp-image-rotate image 0) ;; rotation 90 deg ;;----------------------------------------------------- ;;----------------------------------------------------- ;; Options ;;----------------------------------------------------- (if (= option 0) (begin (gimp-color-balance new-layer 0 1 (- 56) 0 10) ;; balance des couleurs : ombres (gimp-color-balance new-layer 1 1 (- 34) 0 50) ;; balance des couleurs : demi-teintes (gimp-color-balance new-layer 2 1 (- 100) 0 100) ;; balance des couleurs : tons-vifs ) ) (if (= option 1) (begin (plug-in-edge 1 image new-layer 1.0 1 0) ;; detection de bord : contour (sobel) (gimp-invert new-layer) ;; inverser les couleurs (gimp-color-balance new-layer 0 1 -64 0 26) ;; balance des couleurs : ombres (gimp-color-balance new-layer 1 1 -66 0 88) ;; balance des couleurs : demi-teintes (gimp-color-balance new-layer 2 1 -78 0 46) ;; balance des couleurs : tons-vifs ) ) ;; option arriere-plan transparent (if (= transp TRUE) (begin (if (= option 0) (begin (gimp-by-color-select new-layer '(0 0 0) 25 REPLACE TRUE TRUE 2 FALSE) ;; selectionne le noir (gimp-edit-clear new-layer) ;; effacer ) ) (if (= option 1) (begin (gimp-by-color-select new-layer '(255 255 255) 25 REPLACE TRUE TRUE 2 FALSE) ;; selectionne le blanc (gimp-edit-clear new-layer) ;; effacer ) ) (if (= option 2) (begin (gimp-by-color-select new-layer '(0 0 0) 25 REPLACE TRUE TRUE 2 FALSE) ;; selectionne le noir (gimp-edit-clear new-layer) ;; effacer ) ) (gimp-selection-none image) ;; deselection ) ) ;; option superpose (if (= superpose 1) ;; tons clairs (gimp-layer-set-mode new-layer SCREEN) ) (if (= superpose 2) ;; tons fonces (gimp-layer-set-mode new-layer 18) ) (if (= superpose 3) ;; difference (begin (gimp-palette-set-foreground '(0 0 0)) (gimp-palette-set-background '(255 255 255)) (gimp-edit-fill layer-diff 1) ;; remplir le calque de blanc (gimp-layer-set-mode new-layer 6) (gimp-selection-load canal2) ;; canal vers selection (gimp-edit-fill layer-diff 0) ;; remplir la selection de noir (if (= active-s TRUE) (gimp-edit-bucket-fill layer-diff 2 0 100 0 0 0 0) ;; remplir d'un motif ) (gimp-selection-none image) ;; deselection (set! fin-layer (car (gimp-image-merge-down image new-layer 0))) ;; fusionner les 2 derniers calques (gimp-drawable-set-name fin-layer "Effet congelation") ) (begin (gimp-image-remove-layer image layer-diff) ;; effacer le calque vide ) ) ;;----------------------------------------------------- (if (= var-select TRUE) ;; test si il y AVAIT selection (begin ;; aucune selection n'avait été faite ) (begin ;; une selection avait été faite (remettre la selection de l'utilisateur) (gimp-selection-load o-canal) ;; mask de canal vers selection (gimp-image-remove-channel image o-canal) ;; supprimer le mask de canal ) ) ;; mise a jour (gimp-image-remove-channel image canal) ;; supprimer le mask de canal (gimp-image-remove-channel image canal2) ;; supprimer le mask de canal ;; fin d'historique d'annulation (gimp-image-undo-group-end image) (gimp-displays-flush) ;;remettre toutes les outils comme au debut (gimp-palette-set-background old-bg) (gimp-palette-set-foreground old-fg) (gimp-patterns-set-pattern old-pat) );; fin du let );; fin du define ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fin du Script ;; registre (script-fu-register "script-fu-congelation-2" "/Script-Fu/Alchemy/Congelation" "Effet de glace. abcdugimp.free.fr" "Expression" "Free" "03/10/2004" "RGB*" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-OPTION "Mode de script ? (annule les autres parametres, sauf vent)" '("> Aucun" "> Tons clairs" "> Tons fonces" "> Difference") SF-TOGGLE "Activer les textures pour mode de script difference ?" FALSE SF-PATTERN "Motif pour le mode de script difference" "Lightning" SF-TOGGLE "Froid intense ?" FALSE SF-OPTION " Types" '("> Plein" "> Creux" "> Incolore ") SF-ADJUSTMENT "Seuil du Vent" '(10 0 50 1 10 0 0) SF-ADJUSTMENT "Force du Vent (0 = pas de vent)" '(4 0 50 1 10 0 0) SF-TOGGLE "Arriere-plan transparent ?" FALSE )