azioni con gimp
ho la necessità per lavoro di automatizzare una procedura ripetitiva con Gimp. Sono un fotografo e vorrei usere gimp al posto di photoshop x creare le tessere. Partendo da 1 immagine devo dimensionarla e montarne 5 copie su unapagina di un formato fisso. In photoshop con un azione ho risolto il problema ma vorrei poterlo fare anche con gimp.
beh potresti provare a vedere se riesci a fare qualcosa con Script-Fu
Non so se sai qualcosa a riguardo ma praticamente ti viene data la possibilità di scrivere una serie di azioni (anche in maniera abbastanza complessa) in un semplice file di testo, salvare il tutto con il nome nome.scm e metterlo dentro la cartella scripts dentro la cartella Gimp nella tua home directory (per vedere dove ti è stata creata questa cartella basta che guardi in File->Preferenze->Cartelle->Script).
Una volta messo lì dentro Gimp automaticamente la caricherà e ti darà la possibilità di accedervi dal menu Filtri abituale.
Cosa metterci dentro?
Le azioni che puoi usare sono accessibili facilmente dal PDB (il Database Procedurale di Gimp) dalla finestra degli strumenti Xtns->Browser DB.
Una volta dentro alla finestra del browser puoi eseguire una qualsiasi ricerca.
Facciamo un esempio più concreto.
Te hai bisogno all'inizio di prendere l'immagine e resizarla:
cerchiamo quindi "resize" nel PDB: la prima funzione della lista che ci restituisce è quello che fa il nostro caso:
gimp-image-resize
nella parte destra, una volta selezionata la funzione voluta, ci appare il nome della funzione, una descrizione sommaria, i parametri in ingresso (formali) e un aiuto un po' più ampio.
Ovviamente quello che non dici è se le nuove dimensioni sono fisse o se devono essere calcolate in base all'immagine... per essere aiutato sarebbe di grande aiuto se puoi spiegare passo passo cosa effettivamente in un paio di esempi concreti deve fare la tua immagine.
Chiaramente non è tutto qui... Quello che non ti ho detto è che script-fu si basa su Lisp un linguaggio di programmazione fatto a liste: i comandi sono semplicemente racchiusi in parentesi tonde, all'interno delle quali c'è una lista di comandi.
Per questo posso consigliarti di guardarti due tutorial un po' più specifici sul sito del GUG (http://gug.sunsite.dk) sullo scripting
Se hai più familiarità è possibile anche scrivere script in Perl o Phyton, ma se non hai alcuna familiarità direi che puoi tranquillamente usare Script-Fu.
Oltre a questo puoi sempre guardare gli Script-Fu che sono presenti nella installazione base di Gimp, per capire come funziona in esempi ancora più pratici, ma soprattutto funzionanti.
Una volta terminata la sequenza di comandi basta solo specificare dove far apparire nel menu il tuo nuovo script e registrare il tuo script presso il PDB (esempi specifici sono negli script già presenti in GIMP).
Chiaramente se tutto questo ti fa impazzire e non vuoi per nessuna ragione al mondo affrontare il problema o molte cose ti risultano ostiche più del dovuto, non ti preoccupare, posta pure i tuoi dubbi e perplessità e vedrai che sicuramente riusciremo ad ottenere quanto ti serve.
Non so se sai qualcosa a riguardo ma praticamente ti viene data la possibilità di scrivere una serie di azioni (anche in maniera abbastanza complessa) in un semplice file di testo, salvare il tutto con il nome nome.scm e metterlo dentro la cartella scripts dentro la cartella Gimp nella tua home directory (per vedere dove ti è stata creata questa cartella basta che guardi in File->Preferenze->Cartelle->Script).
Una volta messo lì dentro Gimp automaticamente la caricherà e ti darà la possibilità di accedervi dal menu Filtri abituale.
Cosa metterci dentro?
Le azioni che puoi usare sono accessibili facilmente dal PDB (il Database Procedurale di Gimp) dalla finestra degli strumenti Xtns->Browser DB.
Una volta dentro alla finestra del browser puoi eseguire una qualsiasi ricerca.
Facciamo un esempio più concreto.
Te hai bisogno all'inizio di prendere l'immagine e resizarla:
cerchiamo quindi "resize" nel PDB: la prima funzione della lista che ci restituisce è quello che fa il nostro caso:
gimp-image-resize
nella parte destra, una volta selezionata la funzione voluta, ci appare il nome della funzione, una descrizione sommaria, i parametri in ingresso (formali) e un aiuto un po' più ampio.
Ovviamente quello che non dici è se le nuove dimensioni sono fisse o se devono essere calcolate in base all'immagine... per essere aiutato sarebbe di grande aiuto se puoi spiegare passo passo cosa effettivamente in un paio di esempi concreti deve fare la tua immagine.
Chiaramente non è tutto qui... Quello che non ti ho detto è che script-fu si basa su Lisp un linguaggio di programmazione fatto a liste: i comandi sono semplicemente racchiusi in parentesi tonde, all'interno delle quali c'è una lista di comandi.
Per questo posso consigliarti di guardarti due tutorial un po' più specifici sul sito del GUG (http://gug.sunsite.dk) sullo scripting
Se hai più familiarità è possibile anche scrivere script in Perl o Phyton, ma se non hai alcuna familiarità direi che puoi tranquillamente usare Script-Fu.
Oltre a questo puoi sempre guardare gli Script-Fu che sono presenti nella installazione base di Gimp, per capire come funziona in esempi ancora più pratici, ma soprattutto funzionanti.
Una volta terminata la sequenza di comandi basta solo specificare dove far apparire nel menu il tuo nuovo script e registrare il tuo script presso il PDB (esempi specifici sono negli script già presenti in GIMP).
Chiaramente se tutto questo ti fa impazzire e non vuoi per nessuna ragione al mondo affrontare il problema o molte cose ti risultano ostiche più del dovuto, non ti preoccupare, posta pure i tuoi dubbi e perplessità e vedrai che sicuramente riusciremo ad ottenere quanto ti serve.
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.
Essendo un principiante non so nemmeno come fare per rispondere a chi è stato così gentile da darmi questo suggeriemnto. Purtroppo non penso di essere in grado di eseguire la procedura descritta per cui cerco di spiegare esattamente quello che mi servirebbe:
- parto da un'immagine di 18 mega che devo inquadrare manualmente
- dopo l'inquadratura e il taglio (che faccio manualmente perche ogni volta può essere diversa), devo ridurla a una immagine di 3,5 4,5 cm a 300 dpi.
- devo creare una pagina nel formato 21cm x 10 cm a 300 dpi
- selezionare l'mmagine iniziale e copiarla 5 volte sulla pagina creata prima
- chiaramente le 5 immagini devono eddere allineate a una giuida x facilitare il taglio successivo.
Questo è tutto: se qualcuno è in grado di crearmi uno script gli posso fornire un serie di tessere omaggio.
- parto da un'immagine di 18 mega che devo inquadrare manualmente
- dopo l'inquadratura e il taglio (che faccio manualmente perche ogni volta può essere diversa), devo ridurla a una immagine di 3,5 4,5 cm a 300 dpi.
- devo creare una pagina nel formato 21cm x 10 cm a 300 dpi
- selezionare l'mmagine iniziale e copiarla 5 volte sulla pagina creata prima
- chiaramente le 5 immagini devono eddere allineate a una giuida x facilitare il taglio successivo.
Questo è tutto: se qualcuno è in grado di crearmi uno script gli posso fornire un serie di tessere omaggio.
ok vediamo di partire passo passo per capire gli step procedurali di cui necessiterà lo script che andremo a creare:
per inquadrare cosa intendi? ritagliare l'immagine di partenza per ottenerne una più piccola?
le dimensioni a cui verrà ridimensionata l'immagine è forzata a 3,5x4,5 cm? oppure può subire un ritaglio successivo?
quindi "l'inquadratura" e il "ridimensionamento" è proporzionale?
immagino che queste specie di anteprime che crei sulla pagina di 21x10cm siano da mettere una di seguito all'altra... devono essere centrate verticalmente ed equamente distribuite orizzontalmente? (considerando orizzontale l'asse di lunghezza maggiore)
in che senso "taglio successivo" ? la guida dev'essere stampabile? (penso tu sappia che, come in photoshop, le guide non appaiono in stampa)
Beh io conterei di farti capire come funziona la creazione dello script ottenendolo assieme passo passo così se hai bisogno in un futuro di creare un nuovo script che fa qualcosa di diverso sai dove mettere le mani e come girartelo in maniera basilare
per inquadrare cosa intendi? ritagliare l'immagine di partenza per ottenerne una più piccola?
le dimensioni a cui verrà ridimensionata l'immagine è forzata a 3,5x4,5 cm? oppure può subire un ritaglio successivo?
quindi "l'inquadratura" e il "ridimensionamento" è proporzionale?
immagino che queste specie di anteprime che crei sulla pagina di 21x10cm siano da mettere una di seguito all'altra... devono essere centrate verticalmente ed equamente distribuite orizzontalmente? (considerando orizzontale l'asse di lunghezza maggiore)
in che senso "taglio successivo" ? la guida dev'essere stampabile? (penso tu sappia che, come in photoshop, le guide non appaiono in stampa)
Beh io conterei di farti capire come funziona la creazione dello script ottenendolo assieme passo passo così se hai bisogno in un futuro di creare un nuovo script che fa qualcosa di diverso sai dove mettere le mani e come girartelo in maniera basilare
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.
lelia ha scritto:creazione degli script ( difficilissimo!)
dai Lelia, non è DIFFICILISSIMO!
per chi non l'ha mai fatto, come per qualsiasi cosa che richiede un po' di comprensione, risulta ostica di primo acchito... ma poi quando capisci come funzia è una bazzecola..
Posso darti ragione se si tratta di fare calcoli che nello specifico coinvolge tecniche proprie della programmazione, ma anche lì secondo me non è così difficile...
in ogni caso (anche se per utenze più avanzate) ho scritto un tutorial abbastanza comprensibile anche per chi non mastica programmazione sul sito del gug (http://gug.sunsite.dk/tutorials/thepeach1/).
Ma ripeto...
meglio procedere passo passo e lo script viene fuori da solo
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.
Ritornando alle mie tessere voglio cercare di spiegare esattamente quali sono i vari step della procedura:
Si parte da un'immagine di 18 mega che inquadro e ridimensiono in modo manuale, perchè ogni ripresa è diversa per cui non è possibile eseguire una operazione automatica. L'immagine ottenuta sarà 3,5cm x 4,5 cm a 300 dpi
Da questo passaggio dovrebbe iniziare la procedura con i seguenti steps
-- selezionare tutta l'immagine
-- creare una pagina di 21 cm x 10 cm a 300 dpi
-- incollare 5 volte l'immagine sulla pagina avendo cura che le immagini siano allineate a 1 cm dal bordo superiore
-- unire i livelli
La procedura è tutta qui, dopo stamperò l'immagine con una stampante a sublimazione su un foglio A4
Spero di essere stato chiaro, aspetto con fiducia che qualcuno mi possa aiutare.
Si parte da un'immagine di 18 mega che inquadro e ridimensiono in modo manuale, perchè ogni ripresa è diversa per cui non è possibile eseguire una operazione automatica. L'immagine ottenuta sarà 3,5cm x 4,5 cm a 300 dpi
Da questo passaggio dovrebbe iniziare la procedura con i seguenti steps
-- selezionare tutta l'immagine
-- creare una pagina di 21 cm x 10 cm a 300 dpi
-- incollare 5 volte l'immagine sulla pagina avendo cura che le immagini siano allineate a 1 cm dal bordo superiore
-- unire i livelli
La procedura è tutta qui, dopo stamperò l'immagine con una stampante a sublimazione su un foglio A4
Spero di essere stato chiaro, aspetto con fiducia che qualcuno mi possa aiutare.
non ti posso aiutare, perchè non sono ancora in grado di fare una cosa del genere pero' ho trovato delle ottime informazioni a questo indirizzo
http://www.klaban.torun.pl/help/script-fu-tutorial
certo, ci vuole tempo...
ciao Lelia
http://www.klaban.torun.pl/help/script-fu-tutorial
certo, ci vuole tempo...
ciao Lelia
abbi pazienza che lo script è quasi fatto ma necessita un piccolo debug e in questi giorni sono oberato dal lavoro e dallo studio...
abbi fede appena posso posto tutto
abbi fede appena posso posto tutto
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.
hehehe eccomi
contro ogni aspettativa ho ultimato in un momento di follia lo script, scusa per il ritardo, ma i tempi che posso dedicarmi al pc in questo periodo stanno diminiuendo drasticamente...
ma arriviamo al dunque
Piccola premessa:
Scheme (il linguaggio di programmazione per gli script-fu) è un linguaggio basato sulle liste.
Ogni operazione è una sequenza di elementi in una lista nella forma
quindi se volessi fare una somma devo fare qualcosa tipo:
non solo, le funzioni generalmente ritornano un valore, per poter accedere a questo valore devo accedere al primo elemento della lista. In Scheme per fare questo ci sono due funzioni specifiche: car che accede al primo elemento della lista e cdr che accede al resto degli elementi escluso il primo!
Carino, no?
quindi se ho una funzione particolare che mi ritorna un valore:
così riesco ad ottenere il valore restituito dalla funzione gimp-image-height.
I commenti sono scrivibili su linee singole e sono preceduti da un "punto e virgola" (;) e non sono interpretati da GIMP.
Questo è, genericamente parlando, come funziona Scheme, giusto per capire cosa ho scritto.. se ci sono dubbi basta domandare
Per gli argomenti singoli che ogni funzione interna di GIMP accetta in ingresso e i valori restituiti guarda il PDB da: <Toolbox>->Xtns->Browser DB...
NOTA: ho dovuto spezzare il post in due che sembrava nn me lo prendesse così lungo!!!
contro ogni aspettativa ho ultimato in un momento di follia lo script, scusa per il ritardo, ma i tempi che posso dedicarmi al pc in questo periodo stanno diminiuendo drasticamente...
ma arriviamo al dunque
Piccola premessa:
Scheme (il linguaggio di programmazione per gli script-fu) è un linguaggio basato sulle liste.
Ogni operazione è una sequenza di elementi in una lista nella forma
Codice: Seleziona tutto
(funzione argomento1 argomento2 ...)
Codice: Seleziona tutto
(+ 4 5)
Carino, no?
quindi se ho una funzione particolare che mi ritorna un valore:
Codice: Seleziona tutto
(car (gimp-image-height Image))
I commenti sono scrivibili su linee singole e sono preceduti da un "punto e virgola" (;) e non sono interpretati da GIMP.
Questo è, genericamente parlando, come funziona Scheme, giusto per capire cosa ho scritto.. se ci sono dubbi basta domandare
Per gli argomenti singoli che ogni funzione interna di GIMP accetta in ingresso e i valori restituiti guarda il PDB da: <Toolbox>->Xtns->Browser DB...
NOTA: ho dovuto spezzare il post in due che sembrava nn me lo prendesse così lungo!!!
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.
script-fu-thumbnalizer by The Peach
ora spiego passo passo che fa lo script
lo script funziona esclusivamente con immagini di 413px (45mm @ 300dpi) di larghezza e 531px (35mm @ 300dpi) di altezza.
L'immgine finale ha dimensioni 2480x1181px (la dimensione a 300dpi che mi avevi detto ti serviva)
L'immagine sorgente si chiama thumbImage di dimensioni thumbImage-w*thumbImage-h.
L'immagine finale si chiama stripImage di dimensioni stripImage-w*stripImage-h.
Lo script come vedrai prende in ingresso l'immagine e il layer selezionato al momento di lanciare lo script (questi due parametri sono obbligatori)
All'inizio definisco queste variabili tramite la funzione let*
fin qua mi pare abbastanza comprensibile: non ho fatto altro che creare la nuova immagine e dargli uno sfondo bianco di base.
A gimp-image-new deve seguire obbligatoriamente la creazione di un nuovo livello con gimp-layer-new e associare il livello all'immagine con gimp-image-add-layer.
Ora devo fare in summa i seguenti passi per incollare thumbImage alla nuova immagine:
Ora il problema è che questi passi abbastanza semplici ti fanno vedere il procedimento per un singolo livello, ma noi ne abbiamo bisogno per 5!!! non solo, mi sono posto anche il dubbio che la traslazione del nuovo livello (che di default il suo angolo in alto a sx è in posizione (0,0) ) dev'essere posizionato a distanza adeguata gli uni dagli altri...
Per questa ragione ho introdotto un ciclo while (per spiegazioni vedere il mio tutorial su IF-WHILE su http://gug.sunsite.dk ) e calcolando la distanza dei singoli livelli come (thumbImage-w+spacer)+spacer (spacer è la distanza che ho calcolato essere ottimale tra le thumbs, cioè di 69px), ma si capisce meglio se ti scrivo il ciclo:
Detto questo ora non resta altro che creare una nuova finestra per la stripImage e aggiornarne la visione.
ecco fatto!!!
dopo di questo bisogna registrare lo script nel PDB per renderla disponibile ad essere chiamata dall'utente oltre che essere ricercata.
Lo script lo puoi scaricare da QUI
sappimi dire se è tutto ok!
ora spiego passo passo che fa lo script
lo script funziona esclusivamente con immagini di 413px (45mm @ 300dpi) di larghezza e 531px (35mm @ 300dpi) di altezza.
L'immgine finale ha dimensioni 2480x1181px (la dimensione a 300dpi che mi avevi detto ti serviva)
L'immagine sorgente si chiama thumbImage di dimensioni thumbImage-w*thumbImage-h.
L'immagine finale si chiama stripImage di dimensioni stripImage-w*stripImage-h.
Lo script come vedrai prende in ingresso l'immagine e il layer selezionato al momento di lanciare lo script (questi due parametri sono obbligatori)
All'inizio definisco queste variabili tramite la funzione let*
Codice: Seleziona tutto
(define (script-fu-thumbnalizer thumbImage drawable)
(let* (
; 413px = 45mm @ 300dpi
(thumbImage-w (car (gimp-image-width thumbImage)))
; 531px = 35mm @ 300dpi
(thumbImage-h (car (gimp-image-height thumbImage)))
; Larghezza della striscia (stripImage)
(stripImage-w 2480)
; Altezza della striscia
(stripImage-h 1181)
)
; copio l'immagine sorgente indipendentemente dal layer selezionato
(script-fu-copy-visible thumbImage drawable)
; creo la nuova immagine su cui andrò ad incollare la thumb copiata precedentemente
(set! stripImage (car (gimp-image-new stripImage-w stripImage-h 0)))
; creo un livello di base bianco
(set! baseLayer (car (gimp-layer-new stripImage stripImage-w stripImage-h 0 "Base" 100 0)))
(gimp-image-add-layer stripImage baseLayer 0)
; lo riempio di bianco come sfondo
(gimp-drawable-fill baseLayer 2)
A gimp-image-new deve seguire obbligatoriamente la creazione di un nuovo livello con gimp-layer-new e associare il livello all'immagine con gimp-image-add-layer.
Ora devo fare in summa i seguenti passi per incollare thumbImage alla nuova immagine:
Codice: Seleziona tutto
; creo il primo livello dove incollerò la prima immagine
(set! thumb (car (gimp-layer-new stripImage thumbImage-w thumbImage-h 1 "thumb" 100 0)))
(gimp-image-add-layer stripImage thumb 0)
; incollo l'immagine sul nuovo livello e ancoro la selezione fluttuante così ottenuta
(set! tempfloat (car (gimp-edit-paste thumb 0)))
(gimp-floating-sel-anchor tempfloat)
; riposiziono il nuovo layer selection
; 10mm @ 300 = 118px
(gimp-layer-translate thumb1 distanza-w 118)
Per questa ragione ho introdotto un ciclo while (per spiegazioni vedere il mio tutorial su IF-WHILE su http://gug.sunsite.dk ) e calcolando la distanza dei singoli livelli come (thumbImage-w+spacer)+spacer (spacer è la distanza che ho calcolato essere ottimale tra le thumbs, cioè di 69px), ma si capisce meglio se ti scrivo il ciclo:
Codice: Seleziona tutto
(let* (
(counter 0)
(spacer 69))
(while (< counter 5)
; creo un nuovo livello
(set! thumb (car (gimp-layer-new stripImage thumbImage-w thumbImage-h 1 "thumb" 100 0)))
; aggiungo il livello (passo obbligatorio)
(gimp-image-add-layer stripImage thumb 0)
; incollo thumImage copiata con script-fu-copy-visible creando un livello float
(set! tempfloat (car (gimp-edit-paste thumb 0)))
; ancoro il tempfloat al livello creato
(gimp-floating-sel-anchor tempfloat)
; sposto il livello nella posizione specificata
(gimp-layer-translate thumb (+ spacer (* counter (+ thumbImage-w spacer))) 118)
; incremento il counter
(set! counter (+ counter 1))
)
)
Codice: Seleziona tutto
; aggiorno l'immagine - fine dello script
(gimp-display-new stripImage)
(gimp-displays-flush)
dopo di questo bisogna registrare lo script nel PDB per renderla disponibile ad essere chiamata dall'utente oltre che essere ricercata.
Lo script lo puoi scaricare da QUI
sappimi dire se è tutto ok!
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.
OPS!!!
dimenticavo! il file una volta scaricato dev'essere messo nella cartella utente di GIMP degli script (tra le preferenze vedi il percorso specifico)
Se lo fai con GIMP aperto occorre che aggiorni gli script da <Toolbox>->Xtns->Script-Fu->Aggiorna gli Script
dopodichè potrai applicare il tuo script alla tua immagine di partenza da:
<Image>->Script-Fu->Utilità->Thumbnalizer...
enjoy
dimenticavo! il file una volta scaricato dev'essere messo nella cartella utente di GIMP degli script (tra le preferenze vedi il percorso specifico)
Se lo fai con GIMP aperto occorre che aggiorni gli script da <Toolbox>->Xtns->Script-Fu->Aggiorna gli Script
dopodichè potrai applicare il tuo script alla tua immagine di partenza da:
<Image>->Script-Fu->Utilità->Thumbnalizer...
enjoy
The Peach
In the beginning, there was Wilber, Wilber the gimp. The graphic was without form and void, and darkness was upon the face of the desktop, and the Spirit of Wilber was moving over the face of the bitstream.