Project 5: Cover Photos
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 placePixmapNoBkg function should go in your filter.py file and will be identical to placePixmap, except that it will not transfer blue/green screen pixels into the destination image.
We will be adding a new item to the collage list. Instead of 6 items,
there will now be 7. The new item will be added near, but not at, the
end of the list. (We want to always have the Pixmap object be
last). The new item will be the sixth (at index 5) and will specify
whether or not to copy the background pixels of the image.
In your collage.py file, create a function buildCollage, as given below. 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.Pixmap with cols and rows # for each item in clist # assign to filename the first element in item # assign to x0 the second element in item # assign to y0 the third element in item # assign to operator the fourth element in item # assign to alpha the fifth element in item # assign to noBkg the sixth element in item # assign to src the last element in item (index -1) # use a set of if/elif statements to apply the correct # operator to the image (this is several lines of code) # call placePixmap 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.
- In your filter.py file, create a function placePixmapNoBkg that has the same arguments and functionality as placePixmap, 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.
- Edit your buildCollage function so that it uses the sixth element in the collage information list, stored in the noBkg variable, to determine whether to call placePixmap or placePixmapNoBkg 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
if __name__ == "__main__": 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, and at least one blue-screen or green-screen image where the background pixels are not copied into the collage.
Required image 1 is your first collage.
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 FB 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 placePixmap 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.
- Create some new image effects you didn't implement in the last lab.
- Enable the placePixmapNoBkg function to handle both the blue and green screens. You can try to do this automatically (e.g. by checking some part of the image) or by adding a parameter that indicates which kind of background screen is being used.
- Make some additional programs that generate collages with specific geometric arrangements and that take their list of image files from the command line.
- Add additional options to the collage information list, like whether to mirror the image or not, in addition to the other options.
- Create a collage dynamically based on how many images are given on the command line.
- Figure out how to call the proper effect function on each image without using an if/elif control structure. (Ok, this is kind of esoteric, but it's a cool feature of python.)
- Try scaling an image when you put it into the collage. If you want, stick to powers of two.
- Uber-extension: put the collage information in a text file. Have your program read the text file (given as a command-line argument), parse the information, and build the collage. For this to be an uber-extension, you can't write the text file as python code.
Writeup and Hand-in
Turn in your code by putting it into your private handin directory on the Courses server. All files should be organized in a folder titled "Project5" and you should include only those files necessary to run the program. We will grade all files turned in, so please do not turn in old, non-working, versions of files.
Make a new wiki page for your assignment. Put the label cs151f16project5 in the label field on the bottom of the page. But give the page a meaningful title (e.g. Stephanie's project 5).
Your writeup should follow the outline below.
- A brief summary of the task, in your own words. This should be no more than a few sentences. Give the reader context and identify the key purpose and goals of the assignment.
- A description of your solution to the tasks, including any images you created. This should be a description of the form and functionality of your final code. You may want to incorporate code snippets in your description to point out relevant features. Note any unique computational solutions you developed.
- A description of any extensions you undertook, including images demonstrating those extensions. If you added any modules, functions, or other design components, note their structure and the algorithms you used.
- A brief description (1-3 sentences) of what you learned.
- A list of people you worked with, including TAs, and professors. Include in that list anyone whose code you may have seen, such as those of friends who have taken the course in a previous semester.
- Don't forget to label your writeup so that it is easy for others to find. For this lab, use cs151f16project5