The purpose of this project is to make a program that processes a list defining a collage and builds the resulting image. The collage list information can specify if the program should apply an effect and/or an alpha blend to each image.

Here is the reference guide to the Zelle graphics package.


For this assignment you're going to create a couple of new functions. The buildCollage function should go in your collage.py file and will process the collage list information and build the output image. The placeImageNoBkg function should go in your filter.py file and will be identical to placeImage, except that it will not transfer blue/green screen pixels into the destination image.

Greenscreen Flag

We will be adding a new item to the collage list to specify whether the blue/green background should be removed when placing the image into the collage. Therefore, instead of 6 items in each sub-list, there will now be 7. You will need to add another IDX type constant to your set of indexes.

Note: You can use whatever ordering of information you like, but the provided test code assumes that the remove background information is at index 5 and that the Image information will be at index 6.

In your collage.py file, create a function buildCollage, as given below. Unless otherwise specified, each comment is a line of python code in the final function. The indentation of the comments should match the code.

def buildCollage( clist ):
    # assign to (cols, rows) the result of calling getImageSize with clist
    # assign to dst the result of calling graphics.Image with a Point of (0,0) and of size cols and rows
    # for each item in clist
        # assign to x0 the X-offset element of item (i.e. use the IDXXOffset index)
        # assign to y0 the Y-offset element of item
        # assign to operator the filter element of item
        # assign to alpha the alpha element of item
        # assign to noBkg the remove background element of item
        # assign to src the Image element in item

        # use a set of if/elif statements to apply the correct
        # operator to the image (this is several lines of code)

        # call placeImage to put src into dst at location x0, y0 with blend alpha

    # return dst

You can use the function testbuildcollage.py to test your buildCollage function. Read through the test function before you use it. The test function assumes that your build collage knows what to do with the operator strings 'rbswap' and 'original', as we went over in lab.

As always, remember to remove the comments we supply after you have written your code.

Placing an image without its background

In your filter.py file, create a function placeImageNoBkg() that has the same arguments and functionality as placeImage, but does not copy the src pixel into the destination image if the src pixel is part of the background screen. Your function needs to work only for one of the background screens (blue or green). A good extension is to have your function handle both, possibly by adding a parameter.

Update buildCollage( )

Edit your buildCollage() function so that it uses the remove background information in the collage list, stored in the noBkg variable, to determine whether to call placeImage() or placeImageNoBkg() as the last step in the main for loop.


Make a new python file (e.g. mycollage.py) that contains a single main function. Be sure to put a call to the main function behind a test on __name__.

if __name__ == "__main__":

The main() function should create a collage information list, call readImages(), call buildCollage(), then write the image to a file. You can use the testbuildcollage.py file as an example.Your collage should use at least four different source images.

The collage should include at least five different sub-images. Some of these can be copies of one of the source images with different effects. The collage should use at least 3 effects, at least one alpha blend (alpha < 1), and at least one blue-screen or green-screen image where the background pixels are not copied into the collage. You can access your photos here

Required image 1 is your first collage.

Cover Photo

Make a new python file, coverphoto.py, that takes in at least one image filename from the command line. It should build a collage appropriate for a FaceBook cover photo and write it out to a file.

The collage should be about three times as wide as it is tall and have at least three sub-images. You can control the height and width of the collage by appropriate selection and placement of your images, or you can fix the relative height and width and change placeImage to safely handle images that go outside the image boundaries. You can choose random effects for the three images or pick specific effects. The collage should use at least two effects.

Required image 2 is your cover photo collage.


These are only examples. Please be creative and pursue extensions that interest you. It shows!


Make a new wiki page for your assignment. Put the label cs151s18project5 on the page. Each of you needs to make your own writeup.

In addition to making the wiki page writeup, put the python files you wrote on the Courses server in your private directory in a folder named project5.

Colby Wiki

In general, your writeup should follow the outline below.

© 2018 Caitrin Eaton.