Ruotare un'immagine

Domandate qui se non riuscite ad installare i filtri o gli script, oppure se avete problemi legati alla creazione e modifica dei filtri. Qui si pongono le domande più tecniche.
Rispondi
spectrum
Moderatore
Moderatore
Messaggi:414
Iscritto il:ven 24 set 2004, 23:37
Contatta:
Ruotare un'immagine

Messaggio da spectrum » ven 24 set 2004, 23:37

Ciao a tutti. Sto sviluppando un plugin per Gimp e mi sono bloccato per una sciocchezza (ruotare un'immagine) e riesco a farlo a mano ma non tramite plugin.
L'immagine ha una zona trasparente e deve essere ruotata sul centro della zona trasparente.
Facendolo a mano eseguo queste operazioni:
1. duplico il layer da ruotare
2. incateno i due livelli
3. lascio solo uno dei due livelli visibile
4. salvo l'immagine per usarla nel plugin
5. sul livello NON visibile applico lo strumento seleziona regioni contigue
6. sul livello NON visibile applico lo strumento rotazione del livello o della selezione
7. Ottengo l'immagine ruotata come io voglio che sia.

Al plugin passo l'immagine salvata nel punto 4.
Purtroppo però l'ultimo punto non funziona, ovvero non ruota nulla. La selezione viene effettuata correttamente, ed è proprio la rotazione che non viene come dovrebbe. Il risultato è un'immagine esattamente come quella di partenza.
L'esempio che ho messo sotto è solo una delle mille varianti che ho scritto per prova cercando di farlo funzionare.

Mi serve un aiuto perchè non riesco ad andare avanti.
Grazie.
#!/usr/bin/env python
# Ruota - ruota un'immagine su un punto prestabilito

import math
import string
from gimpfu import *

def ruota( filename, gradi, punto_x, punto_y ):
img = pdb.gimp_file_load( filename, filename )
pdb.gimp_fuzzy_select( img.active_layer, punto_x, punto_y, 10, 0, TRUE, 0, 0, 0 )
pdb.gimp_rotate( img.active_layer, 0, gradi )
gimp.Display( img )

register(
"ruota",
"A simple plugin",
"A simple plugin",
"Massimo",
"Massimo",
"2004",
"<Toolbox>/Xtns/Python-Fu/Ruota",
"",
[
(PF_STRING, "filename", "filename", "ruota.xcf" ),
(PF_FLOAT, "gradi", "gradi", 20 ),
(PF_INT, "punto_x", "x", 350 ),
(PF_INT, "punto_y", "y", 350 )
],
[],
ruota)
main()

PS: nel copia incolla l'identazione del plugin è sbagliata

Peach
Aiutante di Wilber
Aiutante di Wilber
Messaggi:114
Iscritto il:sab 22 mag 2004, 21:08
Contatta:

Re: Ruotare un'immagine

Messaggio da Peach » dom 26 set 2004, 12:42

spectrum ha scritto:
#!/usr/bin/env python
# Ruota - ruota un'immagine su un punto prestabilito

import math
import string
from gimpfu import *

def ruota( filename, gradi, punto_x, punto_y ):
img = pdb.gimp_file_load( filename, filename )
pdb.gimp_fuzzy_select( img.active_layer, punto_x, punto_y, 10, 0, TRUE, 0, 0, 0 )
pdb.gimp_rotate( img.active_layer, 0, gradi )
gimp.Display( img )

register(
"ruota",
"A simple plugin",
"A simple plugin",
"Massimo",
"Massimo",
"2004",
"<Toolbox>/Xtns/Python-Fu/Ruota",
"",
[
(PF_STRING, "filename", "filename", "ruota.xcf" ),
(PF_FLOAT, "gradi", "gradi", 20 ),
(PF_INT, "punto_x", "x", 350 ),
(PF_INT, "punto_y", "y", 350 )
],
[],
ruota)
main()
ciao!
spero presto di provare il tuo script :)
ho provato a dare un occhio al pdb e mi pare che tu abbia sbagliato il nome delle funzioni da chiamare a meno che con python tu non usi "_" al posto di "-"
io, per capirci, ho sempre usato "gimp-rotate" e non "gimp_rotate"...

boh
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.

spectrum
Moderatore
Moderatore
Messaggi:414
Iscritto il:ven 24 set 2004, 23:37
Contatta:

Re: Ruotare un'immagine

Messaggio da spectrum » dom 26 set 2004, 19:41

Peach ha scritto: ho provato a dare un occhio al pdb e mi pare che tu abbia sbagliato il nome delle funzioni da chiamare a meno che con python tu non usi "_" al posto di "-"
io, per capirci, ho sempre usato "gimp-rotate" e non "gimp_rotate"...
Le funzioni in python si scrivono con il carattere "_" al posto del carattere "-".
Nel codice che ho postato non ci sono errori sintattici (eccetto l'identazione).

Credevo di aver sbagliato qualcosa nell'utilizzo dei layer o parametri da passare gimp_rotate.

Il problema è che ho poco tempo e non posso convertire tutto a scheme.

Peach
Aiutante di Wilber
Aiutante di Wilber
Messaggi:114
Iscritto il:sab 22 mag 2004, 21:08
Contatta:

Messaggio da Peach » mar 28 set 2004, 17:59

effettivamente l'uso di gimp-rotate sembra essere giusto...
ti consiglio di fare passo passo l'esecuzione dello script e testarlo man mano e vedere se funziona...
in tutto questo hai provato anche ad aggiungere gimp_display_flush per refreshare l'immagine dopo i cambiamenti ???
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.

spectrum
Moderatore
Moderatore
Messaggi:414
Iscritto il:ven 24 set 2004, 23:37
Contatta:

Messaggio da spectrum » mar 28 set 2004, 22:54

Peach ha scritto:effettivamente l'uso di gimp-rotate sembra essere giusto...
ti consiglio di fare passo passo l'esecuzione dello script e testarlo man mano e vedere se funziona...
Questo l'ho già fatto.
Fino a gimp_fuzzy_select funziona correttamente.

E' solo la gimp_rotate che... non fa nulla, come se non la chiamassi affatto... no, non proprio, come se la chiamassi ma gli dicessi di ruotare di 0 gradi.

Però se commento la riga incriminata e l'operazione di rotazione la faccio io a mano allora funziona correttamente.
Peach ha scritto:in tutto questo hai provato anche ad aggiungere gimp_display_flush per refreshare l'immagine dopo i cambiamenti ???
No gimp_display_flush non l'ho usata, però nel plugin originale l'immagine invece di visualizzarla la salvo e credo che a livello di aggiornamento sia la stessa cosa. In ogni caso ho provato ora ma non cambia nulla.

Piuttosto stavo pensando che magari può essere un problema di bindings tra gimp e python. Se fosse un bug lo segnalo ma devo esserne sicuro prima.

Devo provare a scrivere un piccolo plugin in scheme e poi richiamarlo da python. Tu cmq se non sbaglio l'hai usata la gimp_rotate e senza problemi, mi potresti far vedere un esempio di script funzionante così lo provo e mi tolgo il dubbio?

Grazie.

Rispondi