#! /usr/bin/python import Image, random, sys # Size of background (BGX, BGY) = (18000, 11000) # Put a border around it for pictures to extend into # It will be removed later. border = 2000 # resize all images RESIZE = 0.5 bg = Image.new('RGB', (BGX + 2*border, BGY + 2*border)) files = sys.argv[1:] random.shuffle(files) for infile in files: img = Image.open(infile).convert('RGBA') (oldx,oldy) = img.size img = img.resize((int(oldx*RESIZE), int(oldy*RESIZE))) img = img.rotate(random.uniform(0,360), expand=1) (x,y) = img.size (xmid,ymid) = (border + random.randrange(BGX), border + random.randrange(BGY)) # Must be inside the whole box xmid = max(xmid, x/2) xmid = min(xmid, BGX + 2*border - x/2) ymid = max(ymid, y/2) ymid = min(ymid, BGY + 2*border - y/2) bg.paste(img, (xmid-x/2, ymid-y/2), img) bg = bg.crop((border, border, BGX+border, BGY+border)) bg.save('collage.jpg')