Pagina 1 di 1

Ruotare un'immagine

Inviato: ven 24 set 2004, 23:37
da spectrum
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

Re: Ruotare un'immagine

Inviato: dom 26 set 2004, 12:42
da Peach
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

Re: Ruotare un'immagine

Inviato: dom 26 set 2004, 19:41
da spectrum
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.

Inviato: mar 28 set 2004, 17:59
da Peach
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 ???

Inviato: mar 28 set 2004, 22:54
da spectrum
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.