giovedì 2 febbraio 2012

Effetto Lomo con Gimp (Script-fu)


AGGIORNAMENTO
Ultima versione: https://github.com/jackroom/lomopack

Salvare il seguente codice come lomo.scm nella cartella Scripts del Gimp (/home/utente/.gimp-2.x/scripts)

; GIMP Lomo v0.3
; Simula l'effetto di una "lomografia".
; 
; Copiare il file lomo.scm nella cartella scripts di Gimp. Se il programma
; è in esecuzione, aggiornare la lista dei filtri selezionando
; Filtri > Script-fu > Rinfresca gli scripts.
; Il filtro lomo sarà così accessibile da Filtri > Personal > Lomo.

(define (script-fu-lomo inImage inBackground theContrast theMerge theColor theBlur theVign)

 ; Avvia il gruppo della cronologia per questo script
 (gimp-image-undo-group-start inImage)

 (define (Border theAction)
  (let* 
   (
     (inBlur (car (gimp-layer-copy inBackground TRUE)))
     ; Imposta un raggio proporzionale per la sfocatura
     (theWidth (car (gimp-drawable-width inBlur)))
     (theHeight (car (gimp-drawable-height inBlur)))
     (theBlursize (/ (/ (+ theHeight theWidth) 2) 100))
     (theDrawable 0)
     (theE 8)
   )

   (gimp-image-add-layer inImage inBlur -1)
   
   (cond 
    ((= theAction 0)
     (plug-in-gauss-rle RUN-NONINTERACTIVE inImage inBlur theBlursize TRUE TRUE)
    )
    ((= theAction 1)
     (gimp-levels inBlur HISTOGRAM-VALUE 0 255 1.00 0 (- 255 (/ (* theVign 255) 100)))
    )
   )
   
   ; Crea la maschera per il livello della sfocatura
   (let
    ( (inMask (car (gimp-layer-create-mask inBlur ADD-WHITE-MASK))) )
    (gimp-layer-add-mask inBlur inMask)
   )
   
   ; Disegna un'ellisse nella maschera
   (set! theDrawable (car (gimp-image-get-active-drawable inImage)))
   (gimp-ellipse-select inImage (/ theWidth theE) (/ theHeight theE) (- theWidth(* (/ theWidth theE) 2)) (- theHeight (* (/ theHeight theE) 2)) 2 TRUE FALSE 0)
   (gimp-invert theDrawable)
   (gimp-selection-none inImage)
   (plug-in-gauss-rle2 RUN-NONINTERACTIVE inImage theDrawable (/ theWidth 2) (/ theHeight 2))
   
   ; Fonde il livello della sfocatura
   (gimp-image-merge-down inImage inBlur 1)
   ; Attiva il livello modificato
   (set! inBackground (car (gimp-image-get-active-drawable inImage)))
  )
 )

 ; ---------------------------------------------------------------------
 ; Aggiunge la sfocatura ai bordi
 ; ---------------------------------------------------------------------
 (if (= theBlur 1)
  (begin
   (Border 0)
  )
 )

 ; ---------------------------------------------------------------------
 ; Aggiunge un effetto di vignettatura
 ; ---------------------------------------------------------------------
 (if (> theVign 0)
  (begin
   (Border 1)
  )
 )

 ; ---------------------------------------------------------------------
 ; Effetto Lomo
 ; Da questo punto vengono applicati gli effetti di colore all'immagine
 ; ---------------------------------------------------------------------
 (let*
  (
   ; Esegue la copia del livello per la tonalità
   (inTonal (car (gimp-layer-copy inBackground TRUE)))
   ; Copia il livello per la desaturazione
   (inDesat (car (gimp-layer-copy inBackground TRUE)))
  )

  ; Inserisce il livello tonalità
  (gimp-image-add-layer inImage inTonal -1)
  ; Inserisce il livello da desaturare
  (gimp-image-add-layer inImage inDesat -1)

  ; Inverte i livelli del canale blu del livello principale
  (gimp-levels inBackground HISTOGRAM-BLUE 0 255 1.00 255 0)

  ; Imposta la modalità della tonalità come Luce Forte
  (gimp-layer-set-mode inTonal HARDLIGHT-MODE)
  
  ; Desatura l'ultimo livello
  (gimp-desaturate-full inDesat DESATURATE-LUMINOSITY)
  ; Modalità livello desaturazione: Solo Toni Scuri
  (gimp-layer-set-mode inDesat DARKEN-ONLY-MODE)
  ; Regola livelli (contrasta)
  (gimp-levels inDesat HISTOGRAM-VALUE 40 215 1.00 0 255)
  ; Imposta Opacità al 40%
  (gimp-layer-set-opacity inDesat 40)
  
  ; Aumenta il contrasto regolando le curve di inTonal
  (if (= theContrast 1)
   (begin
    (gimp-curves-spline inTonal 0 8 #( 0 0 70 50 195 215 255 255))
    (gimp-curves-spline inTonal 1 8 #( 0 0 84 70 212 208 255 255))
    (gimp-curves-spline inTonal 2 8 #( 0 0 144 127 212 212 255 255))
    (gimp-curves-spline inTonal 3 8 #( 0 0 70 82 194 210 255 255))
   )
  )

  ; Aggiunge del colore
  (if (= theColor 1)
   (begin
    (plug-in-retinex RUN-NONINTERACTIVE inImage inBackground 80 3 2 1.9)
   )
  )

  ; Appiattisce i livelli se deciso
  (if (= theMerge 0)
   (begin
    ; Unisce il livello della tonalità allo sfondo
    (gimp-image-merge-down inImage inTonal 1)
    ; Unisce il livello della saturazione
    (gimp-image-merge-down inImage inDesat 1)
   )
  )
  
  ; Chiude il gruppo della cronologia
  (gimp-image-undo-group-end inImage)

  ; Aggiorna l'immagine
  (gimp-displays-flush)
 )

)

; -----------------------------------------------------------------------
; Attiva lo script
; -----------------------------------------------------------------------
(script-fu-register
 "script-fu-lomo"
 "Lomo"
 "Genera un effetto Lomo"
 "any Jack" 
 "2012"
 "February 3, 2012"
 "RGB*"
 SF-IMAGE "Image" 0
 SF-DRAWABLE "Livello da duplicare" 0
 SF-TOGGLE "Aumenta il contrasto (Blu enfatizzati)" FALSE
 SF-TOGGLE "Crea livelli separati" FALSE
 SF-TOGGLE "Colora (Rende i colori più vivaci)" FALSE
 SF-TOGGLE "Aggiungi una sfocatura ai bordi" FALSE
 SF-ADJUSTMENT "Vignettatura" '(0 0 100 1 10 0 0)
)

; Definisce dove inserire il filtro nel menu
(script-fu-menu-register "script-fu-lomo" "/Filters/Personal")

Nessun commento:

Posta un commento