Nodebox è un software open source per Mac in grado di creare immagini ed elaborazioni grafiche vettoriali.
Come si usa?
Cominciare ad utilizzare Nodebox è abbastanza semplice:
è sufficiente avere conoscenze base di programmazione e voglia di provare.
Nodebox si basa sul linguaggio di programmazione Python, un linguaggio semplice da usare e da imparare.
Inoltre nel sito sono presenti una notevole quantità di esempi pratici creati dalla community, perciò potete anche cominciare con dei copia-incolla per vedere cosa ne esce fuori.
Perchè usarlo?
Già, perchè usare Nodebox al posto di programmi professionali per grafica vettoriale come Illustator?
Un grande pregio di fare grafica scrivendo codice è innanzitutto l’utilizzo di variabili:
possiamo cambiare velocemente resa grafica o palette colori, oppure velocizzare operazioni che richiederebbero veramente troppo tempo farle a mano.
Mi è capitato di dover comporre una griglia di un migliaio di quadrati riempiti con immagini prese da una cartella, avrei potuto anche farlo pazientemente a mano, ma se poi il cliente volesse sostituire i quadrati con dei cerchi?
Oppure talvolta siamo poco ispirati, allora astrarre le immagini via codice può essere un buon metodo per fare velocemente delle prove, esplorare trattamenti sui tracciati o testare combinazioni di colori e semplicemente stare a guardare cosa ne esce.
Dato che l’output è vettoriale possiamo sempre salvare l’immagine come PDF ed importarla in Illustrator per continuare a lavorarla o integrarla nei nostri lavori.
Per saperne di più:
Cominciamo a vedere come creare una composizione di linee ondulate utilizzando una palette colori estrapolata da un’immagine.

web = ximport("web") colors = ximport("colors")
per prima cosa importo le librerie di cui avrò bisogno:
web, che contiene una serie di strumenti in grado di recuperare dati da internet;
colors, che permette di editare e lavorare con i colori in modo estremamente semplice.
n = 20 #numero di elementi da cercare r = random(n) #immagine selezionata q = "Red" #parola da cercare in flickr ncolors = 20 #tot colori da estrapolare numlines = 250 #tot linee delta = 8 #delta spostamento linee s_width = 30 #larghezza tratto delle linee numpoints = 6 #numero di punti nella linea
in questo punto sono specificati la maggior parte dei parametri che ci permetteranno poi di personalizzare l’output.
search = web.flickr.search(q, start=1, count=n, wait=10, cached=True, match=all) img = search[r] i = img.download("small") print img.name, "by", img.author #stampo il titolo e l'autore dell'immagine palette = colors.list(i, n=ncolors) #estrapolo una palette colori dall'immagine
in questa parte eseguo la ricerca di immagini in flickr. Ho utilizzato la parola chiave specificata in precedenza, nel nostro caso “Red”, quindi eseguo il download ed estrapolo una palette colori dall’immagine.
Prendere colori da immagini è sempre un buon metodo per ottenere palette più accattivanti e accostamenti di colore inaspettati ed esaltanti.
bg = rect(0, 0, WIDTH, HEIGHT, draw=False) c1 = palette.lightest c1.a = 255 c2 = palette.darkest c2.a = 255 colors.gradientpath(bg, color(c2), color(c1))
Comincio a disegnare lo sfondo con un gradient radiale, utilizzando il colore più scuro e il più chiaro della palette.
points = [] xpos = -20 ypos = 0 #linea guida for i in range(numpoints): p = (xpos, ypos) points.append(p) xpos += (WIDTH/numpoints) ypos += random(-delta, delta) p = (WIDTH+20, 0) points.append(p)
Quindi definisco una funzione che disegni la prima linea. Il punto di partenza e quello di arrivo sono posizionati, rispettivamente, in alto a sinistra e in alto a destra, entrambi fuori dallo stage. Gli altri punti intermedi li genero con un semplice random, che restituisce un numero in un range compreso tra -delta e +delta, variabile che avevamo definito all’inizio.
#linee derivate colors.shadow(dx=0, dy=2, alpha=5, blur=8.0) for h in range(numlines): newpoints = [] for k in points: newxpos = k[0] newypos = k[1]+random(delta) newpoints.append((newxpos,newypos)) autoclosepath(False) newpath = findpath(newpoints) nofill() c = choice(palette) c.a = 50 #alpha strokewidth(s_width) if random() > .9: strokewidth(s_width*2) stroke(c) drawpath(newpath) points = [] for item in newpoints: points.append((item.x,item.y))
A partire dalla prima linea guida disegno le altre linee. Per ogni punto della linea principale aggiungo un valore random, sempre in base al parametro “delta”, in modo che ogni linea sia spostata verso il basso rispetto alla precedente.
modificando alcuni parametri è possibile ottenere risultati diversi ma tutti affascinanti:




Il codice è stato scritto abbastanza in fretta e può essere sicuramente ottimizzato. Puoi scaricare il file ed utilizzarlo o modificarlo liberamente.
3 comments for 'Waves with Nodebox'
Leave a comment
Waves with Nodebox
posted on Sep 2009
La settimana scorsa stavo cercando di realizzare uno sfondo per un progetto e mi sono affidato a Nodebox, un software open source per Mac che permette di creare immagini ed elaborazioni grafiche usando il linguaggio di programmazione Python. L’effetto finale è una cascata di linee multicolore, con infinite possibilità di output e parametrizzata in modo da cambiare la resa grafica modificando alcune variabili.
29/09/2009
Nice work!
Thank you Tom, I really appreciate your feedback!
5/10/2009
Nice work!