With PIL you can easily access and change the data stored in the pixels of an image. To get the pixel map, call load() on an image. The pixel data can then be retrieved by indexing the pixel map as an array.
pixelMap=img.load()#create the pixel mappixel=pixelMap[0,0]#get the first pixel's value
When you change the pixel data, it is changed in the image it came from (since the pixel map is just a reference to the data rather than a copy).
The following snippet shows how to change the pixel values in an image based on the index of the pixel:
fromPILimportImage# PIL accesses images in Cartesian co-ordinates, so it is Image[columns, rows]img=Image.new('RGB',(250,250),"black")# create a new black imagepixels=img.load()# create the pixel mapforiinrange(img.size[0]):# for every col:forjinrange(img.size[1]):# For every rowpixels[i,j]=(i,j,100)# set the colour accordinglyimg.show()