; le righe che iniziano con ; sono commenti (define (script-fu-multi7 img drawable) (let* ( ; dichiarare tutte qui le variabili usate ; ottiene l'id del gruppo, se esiste ; del livello originale nella variabile gruppolavoro ; questo consente di restare all'interno del gruppo ; del livello originale se questo esiste (scelta 1) ; -------------------------------------------------- ;(gruppolavoro (car(gimp-item-get-parent drawable))) ; -------------------------------------------------- ; oppure ; crea un nuovo gruppo senza visualizzarlo (scelta 2) ; e ottiene l'id nella variabile gruppolavoro ; ------------------------------------------ (gruppolavoro (car(gimp-layer-group-new img))) ; ------------------------------------------ ; decommentare una delle 2 ) ; funzioni personali (in fondo allo script): ; --------------------------------------------------------------------- ; ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) ; ; (copia-livello img nomelivello) ; ; (incolla-livello img nomelivello) ; ; (livello-col-nome img nomelivello) ; la funzione ritorna l'id del livello col nome nomelivello ; ; (scala-proporzione img dimensionemax) ; la funzione scala l'immagine proporzionalmente ; al valore dimensionemax (numero di pixel) per il lato più lungo ; ; (maschera-al-livello img nomelivello tipomask) ; crea e aggiunge una mask al livello col nome nomelivello ; ; --------------------------------------------------------------------- ; img e drawable sono variabili globali dichiarate nel define iniziale ; pertanto vanno passate semplicemente con lo stesso nome dove richiesto ; img drawable ; ; nomelivello è una stringa che contiene tra virgolette il nome del livello, ; ad esempio "Base" ; ; opacita (del livello) un numero da 0 (trasparente) a 100 (opaco) ; ; modalità (di fusione) un numero da 0 a 25 o il NOME-MODE corripondente ; che trovate in gimp-layer-new nel navigatore procedure: ; The layer combination mode ; NORMAL-MODE (0), DISSOLVE-MODE (1), BEHIND-MODE (2), MULTIPLY-MODE (3), SCREEN-MODE (4), ; OVERLAY-MODE (5), DIFFERENCE-MODE (6), ADDITION-MODE (7), SUBTRACT-MODE (8), ; DARKEN-ONLY-MODE (9), LIGHTEN-ONLY-MODE (10), HUE-MODE (11), SATURATION-MODE (12), ; COLOR-MODE (13), VALUE-MODE (14), DIVIDE-MODE (15), DODGE-MODE (16), BURN-MODE (17), ; HARDLIGHT-MODE (18), SOFTLIGHT-MODE (19), GRAIN-EXTRACT-MODE (20), GRAIN-MERGE-MODE (21), ; COLOR-ERASE-MODE (22), ERASE-MODE (23), REPLACE-MODE (24), ANTI-ERASE-MODE (25) ; ; tipomask = tipo di mask un numero da 0 a 6 o il NOME-MASK corripondente ; vedi gimp-layer-create-mask: ; The type of mask ADD-WHITE-MASK (0), ADD-BLACK-MASK (1), ADD-ALPHA-MASK (2), ; ADD-ALPHA-TRANSFER-MASK (3), ADD-SELECTION-MASK (4), ADD-COPY-MASK (5), ADD-CHANNEL-MASK (6) ; qui ci saranno tutte le operazioni da compiere ; fai partire l'undo unico per tutte le operazioni ; successive fino a gimp-image-undo-group-end (gimp-image-undo-group-start img) ; deseleziona qualsiasi selezione impostata (gimp-selection-none img) ; ------------------------------------------- ;Imposta ad "Originale" in nome del layer di base ; (gimp-item-set-name ; (car (gimp-image-get-active-layer img)) ; "Originale" ; ) ; decommentare le due funzioni in caso di (scelta 2) ; inserisce il nuovo gruppo gruppolavoro nell'immagine ; -------------------------------------------- (gimp-image-insert-layer img gruppolavoro -1 0) ; -------------------------------------------- ; da il nome "Script" al gruppolavoro ; -------------------------------------------- ; (gimp-item-set-name gruppolavoro "Script") ; -------------------------------------------- ; per non rinominare in "Originale" il livello iniziale ; copio subito il drawable (gimp-edit-copy drawable) ; crea un nuovo livello nel gruppo livelli id gruppolavoro ; col nome "Base" (crea-nuovo-livello img drawable "Base" 100 NORMAL-MODE gruppolavoro) ; ; copia il livello "Originale" nel buffer ... ; (copia-livello img "Originale") ; e incollalo nel livello col nome "Base" (incolla-livello img "Base") ; qui ci saranno le nostre operazioni da compiere ---------------------------------------------------- ; pre trattamento scala 650 e anisotropic strong (scala-proporzione img 650) (gimp-progress-init "Attendere filtro g'mic anisotropic strong" -1) (plug-in-gmic 1 img drawable 1 "-gimp_anisotropic_smoothing 220,0.7,0.77,0.6,1.1,0.8,30,2,0,1,1,0,1,0" ) (gimp-progress-end) ; fase 1 (crea-nuovo-livello img drawable "Layer-new" 100 NORMAL-MODE gruppolavoro) (copia-livello img "Base") (incolla-livello img "Layer-new") (gimp-progress-init "Attendere filtro g'mic tk_dri" -1) (gimp-progress-pulse) (plug-in-gmic 1 img (livello-col-nome img "Layer-new") 1 "-gimp_tk_dri 0,0.5,0.5,1,0.5,0,1,0" ) (gimp-progress-end) (gimp-progress-init "Attendere filtro g'mic anisotropic" -1) (gimp-progress-pulse) (plug-in-gmic 1 img (livello-col-nome img "Layer-new") 1 "-gimp_anisotropic_smoothing 30,0.7,0.3,0.6,1.1,0.8,30,2,2,1,1,0,1,0" ) (gimp-progress-end) (gimp-curves-spline (livello-col-nome img "Layer-new") 0 6 #(0 0 223 239 255 255) ) (scala-proporzione img 2500) ; fase 2 (crea-nuovo-livello img drawable "layer-lgmic" 100 NORMAL-MODE gruppolavoro) (crea-nuovo-livello img drawable "layer-lgmic-chiaro" 100 NORMAL-MODE gruppolavoro) (crea-nuovo-livello img drawable "layer-temp1" 100 NORMAL-MODE gruppolavoro) (crea-nuovo-livello img drawable "layer-temp2" 100 NORMAL-MODE gruppolavoro) (copia-livello img "Layer-new") (incolla-livello img "layer-temp1") (plug-in-unsharp-mask 1 img (livello-col-nome img "layer-temp1") 6 0.6 1 ) (copia-livello img "layer-temp1") (incolla-livello img "layer-temp2") (incolla-livello img "layer-lgmic") (gimp-curves-spline (livello-col-nome img "layer-lgmic") 0 10 #(0 0 45 79 128 163 193 219 255 255) ) (gimp-progress-init "Attendere filtro g'mic drawing" -1) (gimp-progress-pulse) (plug-in-gmic 1 img (livello-col-nome img "layer-lgmic") 1 "-to_rgb -drawing 17.64" ) (gimp-progress-end) (copia-livello img "layer-lgmic") (incolla-livello img "layer-lgmic-chiaro") (gimp-curves-spline (livello-col-nome img "layer-lgmic-chiaro") 0 12 #(0 0 2 50 33 122 128 158 201 214 255 255) ) ; livelli + fotocopia "layer-temp2" (gimp-levels (livello-col-nome img "layer-temp2") 0 13 242 1.20 0 255 ) (plug-in-photocopy 1 img (livello-col-nome img "layer-temp2") 19.10 0.937 0.2 0.761 ) ; modo moltiplica "layer-temp2" (gimp-layer-set-mode (livello-col-nome img "layer-temp2") MULTIPLY-MODE ) ; livelli posterizza e blur "layer-temp1" (gimp-levels (livello-col-nome img "layer-temp1") 0 13 242 1.20 0 255 ) (gimp-posterize (livello-col-nome img "layer-temp1") 9 ) (plug-in-gauss 1 img (livello-col-nome img "layer-temp1") 9 9 0 ) ; "layer-temp1" mode moltiplic opacità 50 (gimp-layer-set-mode (livello-col-nome img "layer-temp1") MULTIPLY-MODE ) (gimp-layer-set-opacity (livello-col-nome img "layer-temp1") 50 ) ; merge per velocizzare scala (gimp-image-merge-visible-layers img 1) (scala-proporzione img 650) ; ultimo ritocco livelli (gimp-levels (car (gimp-image-get-active-drawable img) ) 0 27 255 0.86 0 255 ) ; filtro bilateral finale (gimp-progress-init "Attendere filtro g'mic bilateral" -1) (gimp-progress-pulse) (plug-in-gmic 1 img (car (gimp-image-get-active-drawable img) ) 1 "-gimp_bilateral 4.4,3,2,0,0" ) (gimp-progress-end) ; qui finiscono le nostre operazioni ---------------------------------------------------------------- ; ferma l'undo unico (gimp-image-undo-group-end img) ; conclude tutte le operazioni in corso ; e rigenera il display (gimp-displays-flush) ) ) ; ------------------------------ ; Funzione di registrazione ; ------------------------------ (script-fu-register "script-fu-multi7" _"/Filters/MC/Multi/multi 7 (come 3b ma pre 650 anistrong)" "" "MC" "" "2012, apr" "RGB* GRAY*" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 ) ; -------------------------------------------------------------------- ; funzioni personali ; -------------------------------------------------------------------- ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) ; ; la funzione crea un nuovo livello (define (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (let* ( ; dichiarare tutte qui le variabili usate ) ; qui ci saranno tutte le operazioni da compiere (gimp-image-insert-layer img (car (gimp-layer-new img (car (gimp-drawable-width drawable)) (car (gimp-drawable-height drawable)) (car (gimp-drawable-type drawable)) nomelivello opacita modalita ) ) gruppo 0 ) ; fine operazioni ) ) ; -------------------------------------------------------------------- ; (copia-livello img nomelivello) ; ; la funzione copia il livello col nome nomelivello nel buffer (define (copia-livello img nomelivello) (let* ( ; dichiarare tutte qui le variabili usate ) ; qui ci saranno tutte le operazioni da compiere (gimp-edit-copy (car (gimp-image-get-layer-by-name img nomelivello ) ) ) ; fine operazioni ) ) ; -------------------------------------------------------------------- ; (incolla-livello img nomelivello) ; ; la funzione incolla il buffer nel livello col nome nomelivello (define (incolla-livello img nomelivello) (let* ( ; dichiarare tutte qui le variabili usate ) ; qui ci saranno tutte le operazioni da compiere (gimp-floating-sel-anchor (car (gimp-edit-paste (car (gimp-image-get-layer-by-name img nomelivello ) ) 0 ) ) ) ; fine operazioni ) ) ; -------------------------------------------------------------------- ; (scala-proporzione img dimensionemax) ; ; la funzione scala l'immagine proporzionalmente ; al valore dimensionemax (numero di pixel) per il lato più lungo (define (scala-proporzione img dimensione) (let* ( ; dichiarare tutte qui le variabili usate ; queste variabili sono usate nella funzione ; (dimensione) -> non serve più perchè già dichiarata sopra nel define ; le variabili locali seguenti sono tutte inizializzate a zero ; altrimenti gimp si lamenta (fattore 0) (largh_finale 0) (alt_finale 0) (larghezza 0) (altezza 0) ; fine variabili ) ; qui ci saranno tutte le operazioni da compiere ; mettiamo nella variabile larghezza l'attuale larghezza dell'immagine (set! larghezza (car (gimp-image-width img) ) ) ; mettiamo nella variabile altezza l'attuale altezza dell'immagine (set! altezza (car (gimp-image-height img) ) ) ; ciclo if per determinare il fattore di aspetto ; e calcolo dello stesso (if (< altezza larghezza) (set! fattore (/ larghezza dimensione) ) (set! fattore (/ altezza dimensione) ) ) ; calcolo di largh_finale e alt_finale immagazzinata ; nelle rispettive variabili (set! largh_finale (/ larghezza fattore) ) (set! alt_finale (/ altezza fattore) ) ; infine scaliamo l'immagine alle nuove dimensioni (gimp-image-scale img largh_finale alt_finale) ; fine operazioni ) ) ; -------------------------------------------------------------------- ; (livello-col-nome img nomelivello) ; ; la funzione ritorna l'id del livello col nome nomelivello (define (livello-col-nome img nomelivello) (let* ( ; dichiarare tutte qui le variabili usate ) ; qui ci saranno tutte le operazioni da compiere (car (gimp-image-get-layer-by-name img nomelivello ) ) ; fine operazioni ) ) ; -------------------------------------------------------------------- ; (maschera-al-livello img nomelivello tipomask) ; ; crea e aggiunge una mask al livello col nome nomelivello (define (maschera-al-livello img nomelivello tipomask) (let* ( ; dichiarare tutte qui le variabili usate ) ; qui ci saranno tutte le operazioni da compiere (gimp-layer-add-mask (car (gimp-image-get-layer-by-name img nomelivello ) ) (car (gimp-layer-create-mask (car (gimp-image-get-layer-by-name img nomelivello ) ) tipomask ) ) ) ; fine operazioni ) ) ; --------------------------------------------------------------------