This is an old revision of the document!
Get started with python, ipython notebooks and anaconda.
An ipython notebook that generates a random image. We will run this notebook 5 times; it should generate 5 different, moderately complex images. Each image should be 512 x 288. Have fun with it!
Throughout this class, we will be using a combination of ipython notebooks and the anaconda python distribution. For this lab, you must install anaconda, and write a simple python program (using ipython notebooks) and use it to generate simple random images.
You can generate any sort of random image that you want – consider random lines, random curves, random text, etc. Each time the program is run, it should generate a different random image. Your image should have at least 50 random elements (they can all be the same type, such as random lines, and can be created in a loop). We won't count the number of elements; this is just to encourage you to create random images with moderate complexity.
In preparation for future labs, we strongly encourage you to use the cairo package as part of your image generator.
http://docs.continuum.io/anaconda/install
To generate images, check out PIL and cairo:
conda install cairo
To generate random numbers, check out the numpy.random module.
To create a new notebook, run:
jupyter-notebook
This should start an ipython kernel in the background, set up a webserver, and point your browser to the webserver. In the upper-right corner, you will see a “new” menu; under that menu you should see “Notebook” and “Python 2”. This will create a new notebook.
Here's some starter code to help you generate an image:
import cairo import numpy # A simple function to display an image in an ipython notebook def nbimage( data ): from IPython.display import display, Image from PIL.Image import fromarray from StringIO import StringIO s = StringIO() fromarray( data ).save( s, 'png' ) display( Image( s.getvalue() ) ) WIDTH = 512 HEIGHT = 288 # this is a numpy buffer to hold the image data data = numpy.zeros( (HEIGHT,WIDTH,4), dtype=numpy.uint8 ) # this creates a cairo context based on the numpy buffer ims = cairo.ImageSurface.create_for_data( data, cairo.FORMAT_ARGB32, WIDTH, HEIGHT ) cr = cairo.Context( ims ) # draw a blue line cr.set_source_rgba( 1.0, 0.0, 0.0, 1.0 ) cr.set_line_width( 2.0 ) cr.move_to( 0.0, 0.0 ) cr.line_to( 100.0, 100.0 ) cr.stroke() # display the image nbimage( data )