; le righe che iniziano con ; sono commenti (define (script-fu-demomask-funzioni img drawable) (let* ( ; dichiarare tutte qui le variabili usate ; ottiene l'id del gruppo, se esiste ; del livello originale nella variabile gruppoattuale ; questo consente di restare all'interno del gruppo ; del livello originale se questo esiste (gruppoattuale (car(gimp-item-get-parent drawable))) ) ; 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) ; qui ci saranno le nostre operazioni da compiere ;Imposta ad "Originale" in nome del layer di base (gimp-item-set-name (car (gimp-image-get-active-layer img)) "Originale" ) ; crea un nuovo livello nel gruppo livelli id gruppoattuale ; col nome "Color" modalita COLOR-MODE (crea-nuovo-livello img drawable "Color" 100 COLOR-MODE gruppoattuale) ; copia il livello "Originale" nel buffer ... (copia-livello img "Originale") ; e incollalo nel livello col nome "Color" (incolla-livello img "Color") ; applichiamo la sfocatura gaussiana al livello "Color" (plug-in-gauss-rle2 0 img (livello-col-nome img "Color") 9.0 9.0 ) ; crea e aggiungi una mask nera al livello "Color" (maschera-al-livello img "Color" ADD-BLACK-MASK) ; 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-demomask-funzioni" _"/Filters/Personali/demo mask funzioni" "demo2" "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 ) ) ; --------------------------------------------------------------------