23 aprile 2009

PIL Immagini con Python

PIL e una libreria Python che permette di elaborare, e nello stesso tempo creare immagini in molteplici formati tra cui GIF, JPEG, BMP, PNG, PBM, TIFF, RGB, PGM, RAST e molti altri, per una lista completa vi rimando al sito www.pythonware.com, e alla relativa documentazione.

PIL e scritta da Fredrik Lundh, l'autore del libro "The Standard Python Library", e molte altre librerie scritte in python scaricabili dal sito effbot.org.

Ecco due piccoli(e semplici) esempi di PIL con il suo modulo Image.



Crea una immagine

>>> from PIL import Image, ImageDraw
#crea una nuova immagine 400x400 pixel di colore nero
>>> crea_immagine = Image.new('RGB',(400,400),(0,0,0))
>>> draw = ImageDraw.Draw(crea_immagine)
#crea una linea di colore
>>> draw.line((80,60,190,90), fill = (0,255,0))
#scrive il testo di colore bianco
>>> draw.text((100,180), 'PIL is Magic!', (255,255,255))
#scrive una linea di colore
>>> draw.line((200,200,40,240), fill = (255,0,0))
>>> crea_immagine.show()#.show visualizza l'immagine
#.save() per salvarla
>>> crea_immagine.save('my_canvas.jpg')
>>>


Elaborazione Immagine con PIL tramite il modulo principale Image.
Questa sotto è l'immagine "labs.png" originaria prima dell'elaborazione con la libreria PIL.




















>>> import Image
#apro l'immagine da elaborare
>>> immagine = Image.open('labs.png')
#visualizza l'immagine
>>> immagine.show()
#converte l'immagine
>>> immagine.convert('1').show()
#salva l'immagine in formato .gif
>>> immagine.save("labs_elaborata_con_PIL.gif")
>>>




Questa invece è l'immagine "labs_elaborata_con_PIL.gif" dopo averla aperta e eleborata col modulo Image.





















Questi naturalmente, sono piccoli esempi che non rendono giustizia, della potenza reale di PIL, e del modulo Image. Per quanti volessero approfondire la libreria PIL, al suo interno ha molti altri moduli molto utili e potenti al pari del modulo Image.

19 aprile 2009

PYTHON Funzioni Annidate

Annidare le funzioni(le def) nelle ultime versioni di python e del tutto normale. Semplicemente le def sono codice eseguibile a tutti gli effetti, ma nelle "vecchie" versioni non era affatto cosi.

La def delle versioni recenti.

>>> def func():
... scope_func = 'marameoo'
""" una funzione e del codice eseguibile
a tutti gli effetti"""
... def func_annidata():
... print 'tu sei un ..', scope_func
... return func_annidata
...
>>> chiamata = func()
>>> chiamata() # esegue la def annidata
tu sei un .. marameoo
>>>


Questo codice che nelle versioni 2.4, 2.5, 2.6 di Python funziona a meraviglia, ma se lo provate in una versione precedente a quelle appena elencate vedrete che produce degli errori.

Per ottenere del codice che funziona in qualsiasi versione di python ha bisogno che la def annidata referenzi il valore passato dalla def precedente.

Vediamo un esempio.

>>> def func():
... scope_func = 'marameoo'
... # Referenza
... def func_annidata(scope_func = scope_func):
... print 'tu sei un ..', scope_func
... func_annidata()
...
>>> func() # chiamata alla funzione
tu sei un .. marameoo
>>>

Perle Della Bash[19-04]

Questo comando trova tutti i file nascosti(quelli col dot .)nella vostra /home/directory e li manda in output.
:~$ grep -l 'PATH' ~/.[!.]*


cerca nella home dell'utente tutti i file mediante l'estensione passatagli(in questo caso file musicali '.mp3'), e se sono molti 'less' permette di leggerli pagina dopo pagina nella schermata della shell.
:~$ find /home/archie -name *.mp3 | xargs pink floyd | less



rimuove linee bianche in un file e le visualizza tramite lo stream di sed.
:~$ cat my_file | sed /^$/d



cerca e rimuove file con estensione '.rb' tramite una pipe con rm
:~$ find . -name '*.rb' | rm



cerca con find file di testo dal nome sia in minuscole che con le maiuscole
:~$ find . -name '*.txt [Ff][Ll][Vv]' -print

E Stata Dura ma Siamo Nuovamente on-line

Ragazzi anche se non ve nè può fregar de meno, siamo nuovamente operativi!

Devo ammettere, che trovare una piastra madre per il mio 'povero' PentiumIII, non è stata una passeggiata, ma alla fine ci sono riuscito. E oltre tutto, ne ho approfittato per dare anche una bella rinfrescata alla macchina in generale(si è anzianotta).

Ho aggiunto 128mb di RAM in più. Ora siamo alla "megagalattica" quantità di 620mb, e giacché che c'ero, ho pensato bene di aggiungere un "mega" hard disk da 20 giga, dove risiede già una fiammante Debian Lenny.

Ecco alcuni screenshots

Il Potente Processor ;-)

















E la rivitalizzante Ram ;-)
















Che dire, mah, non saprei. Sicuramente dopo la sosta forzata, possiamo riprendere a scrivere sul blog.