; le righe che iniziano con ; sono commenti (define (script-fu-demolivelligruppo2 img drawable) (let* ( ; dichiarare tutte qui le variabili usate ; crea il nuovo gruppo senza visualizzarlo ; e ottiene l'id nella variabile miogruppo (miogruppo (car(gimp-layer-group-new img))) ) ; qui ci saranno tutte le operazioni da compiere ; 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 ; ; --------------------------------------------------------------------- ; 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) ; 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" ) ; inserisce il gruppo miogruppo nell'immagine (gimp-image-insert-layer img miogruppo -1 0) ; da il nome "Script" al gruppo (gimp-item-set-name miogruppo "Script") ; crea un nuovo livello nel gruppo livelli id miogruppo ; col nome "Base" ; usando la nostra funzione ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (crea-nuovo-livello img drawable "Base" 100 NORMAL-MODE miogruppo) ; copia il livello "Originale" nel buffer ... ; usando la nostra funzione ; (copia-livello img nomelivello) (copia-livello img "Originale") ; e incollalo nel livello col nome "Base" ; usando la nostra funzione ; (incolla-livello img nomelivello) (incolla-livello img "Base") ; NOTA usare sempre "Base" cioè un livello copia dell'originale ; in modalita di fusione NORMAL-MODE e opacità 100 ; perchè gimp usa le modalità di fuzione SOLO all'interno del gruppo ; mentre con i livelli esterni al gruppo conta solo la modalità di fusione ; del livello gruppo, diversamente dal comportamento di Photoshop. ; qui finiscono le generiche operazioni di inizializzazione ; ; qui inseriremo le nostre operazioni da compiere ----------------------------------------------------- ; parte 5 ---------------------------------------------------- ; crea un nuovo livello nel gruppo livelli id miogruppo ; col nome "Colori-Livelli" ; usando la nostra funzione ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (crea-nuovo-livello img drawable "Colori-Livelli" 100 NORMAL-MODE miogruppo) ; copia il livello "Base" nel buffer ... ; usando la nostra funzione ; (copia-livello img nomelivello) (copia-livello img "Base") ; e incollalo nel livello col nome "Colori-Livelli" ; usando la nostra funzione ; (incolla-livello img nomelivello) (incolla-livello img "Colori-Livelli") ; applica colori-livelli 12 1.22 222 0 255 ; al livello col nome "Colori-Livelli" (gimp-levels (livello-col-nome img "Colori-Livelli") 0 12 222 1.22 0 255 ) ; fine parte 5 ----------------------------------------------- ; appendice parte 5 colori-livelli-auto ---------------------- ; crea un nuovo livello nel gruppo livelli id miogruppo ; col nome "Colori-Livelli-Auto" ; usando la nostra funzione ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (crea-nuovo-livello img drawable "Colori-Livelli-Auto" 100 NORMAL-MODE miogruppo) ; copia il livello "Base" nel buffer ... ; usando la nostra funzione ; (copia-livello img nomelivello) (copia-livello img "Base") ; e incollalo nel livello col nome "Colori-Livelli-Auto" ; usando la nostra funzione ; (incolla-livello img nomelivello) (incolla-livello img "Colori-Livelli-Auto") ; applica colori-livelli AUTO ; al livello col nome "Colori-Livelli-Auto" (gimp-levels-stretch (livello-col-nome img "Colori-Livelli-Auto") ) ; fine appendice parte 5 colori-livelli-auto ----------------- ; parte 6 ----------------------------------------------- ; crea un nuovo livello nel gruppo livelli id miogruppo ; col nome "Colori-Curve" ; usando la nostra funzione ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (crea-nuovo-livello img drawable "Colori-Curve" 100 NORMAL-MODE miogruppo) ; copia il livello "Base" nel buffer ... ; usando la nostra funzione ; (copia-livello img nomelivello) (copia-livello img "Base") ; e incollalo nel livello col nome "Colori-Curve" ; usando la nostra funzione ; (incolla-livello img nomelivello) (incolla-livello img "Colori-Curve") ; applichiamo Colori-Curve al livello "Colori-Curve" (gimp-curves-spline (livello-col-nome img "Colori-Curve") 0 10 #( 18 0 59 83 119 170 206 208 255 255 ) ) ; fine parte 6 ----------------------------------------------- ; parte 7 ---------------------------------------------------- ; crea un nuovo livello nel gruppo livelli id miogruppo ; col nome "Gaussiana" ; usando la nostra funzione ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (crea-nuovo-livello img drawable "Gaussiana" 100 NORMAL-MODE miogruppo) ; copia il livello "Colori-Curve" nel buffer ... ; usando la nostra funzione ; (copia-livello img nomelivello) (copia-livello img "Colori-Curve") ; e incollalo nel livello col nome "Gaussiana" ; usando la nostra funzione ; (incolla-livello img nomelivello) (incolla-livello img "Gaussiana") ; applichiamo la sfocatura gaussiana al livello "Gaussiana" (plug-in-gauss-rle2 1 img (livello-col-nome img "Gaussiana") 9.0 9.0 ) ; fine parte 7 ----------------------------------------------- ; parte 8 ---------------------------------------------------- ; imposta la Modalità del livello con nome "Gaussiana" a 3 (moltiplica) (gimp-layer-set-mode (livello-col-nome img "Gaussiana") 3 ) ; imposta l'Opacita del livello con nome "Gaussiana" a 50 (gimp-layer-set-opacity (livello-col-nome img "Gaussiana") 50 ) ; fine parte 8 ----------------------------------------------- ; parte 9 ---------------------------------------------------- ; ora simuliamo l'operazione menu - livelli - dal visibile di gimp ; che permette di creare un nuovo livello su cui effettuare eventuali ; nuove operazioni, senza appiattire l'immagine o fondere i visibili ; conservando cosi il workflow per eventuali modifiche manuali ; per prima cosa copia il visibile nel buffer ; (il visiblile è la composizione dei livelli con eventuali sovrapposti, ; multiplicatori, divisori eccetera) (gimp-edit-copy-visible img) ; poi crea un nuovo livello nel gruppo livelli id miogruppo ; col nome "Visibile" ; usando la nostra funzione ; (crea-nuovo-livello img drawable nomelivello opacita modalita gruppo) (crea-nuovo-livello img drawable "Visibile" 100 NORMAL-MODE miogruppo) ; poi incolla il buffer nel livello col nome "Visibile" ; usando la nostra funzione ; (incolla-livello img nomelivello) (incolla-livello img "Visibile") ; ------------------------------------------------------------- ; ora scaliamo l'immagine a 800px per il lato più lungo ; rispettando l'aspetto ; usando la nostra funzione ; (scala-proporzione img dimensione) (scala-proporzione img 800) ; fine parte 9 ----------------------------------------------- ; qui finiscono le nostre operazioni ----------------------------------------------------------- ; ora fermiamo l'undo e finalizziamo ; ferma l'undo unico (gimp-image-undo-group-end img) ; conclude tutte le operazioni in corso ; e rigenera il display (gimp-displays-flush) ; fine operazioni ) ) ; ------------------------------ ; Funzione di registrazione ; ------------------------------ (script-fu-register "script-fu-demolivelligruppo2" _"/Filters/Personali/demo livelli gruppo con funzioni" "demo livelli gruppo con funzioni" "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 ) ) ; --------------------------------------------------------------------