changeset 8:bdaa5bd26dcf

Added : script to merge a character image with a random background image
author guitch
date Tue, 26 Jan 2010 18:58:10 -0500
parents f2d46bb3f2d5
children 64dac4aabc04
files transformations/add_background_image.py
diffstat 1 files changed, 79 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/transformations/add_background_image.py	Tue Jan 26 18:58:10 2010 -0500
@@ -0,0 +1,79 @@
+#!/usr/bin/python                                                                                 
+# -*- coding: iso-8859-1 -*-                                                                      
+# usage : add_background_image.py "image_name"
+# Chooses a random image in "image_dir" and set a random crop of it as a background to the character image "image_name" given as argument                                                   
+
+##################
+# import libraries
+##################
+
+import sys, os, random, fnmatch
+import Image           
+
+###########
+# variables
+###########
+# don't forget the "/" at the end of directories
+
+if len(sys.argv) < 2:
+	print "No argument, exiting"
+	sys.exit()
+
+char_image = sys.argv[1]
+image_dir = "./images/"                               
+pattern = "*.jpg"                                     
+threshold = 100;
+
+###########
+# functions
+###########
+
+# make a random 32x32 crop of image "image" and returns the new image_dir
+def rand_crop(image):
+	w, h = image.size
+	x, y = random.randint(1,w - 32), random.randint(1,h - 32)
+
+	return image.crop((x, y, x + 32, y + 32))
+
+# select a random image from "image_dir" and crops it
+def rand_image():
+	files = os.listdir(image_dir)
+	image_files = fnmatch.filter(files, pattern)
+	i = random.randint(0, len(image_files) - 1)
+
+	image = Image.open(image_dir + image_files[i]).convert("L")
+
+	return rand_crop(image)
+
+
+# set "bg_image" as background to "image", based on a pixels threshold
+def set_bg(image, bg_image, threshold):
+	pix = image.load()
+	bg_pix = bg_image.load()
+
+	for x in range(1, 32):
+		for y in range(1, 32):
+			if pix[x, y] > threshold:
+				pix[x, y] = bg_pix[x, y]
+
+	return image
+
+######
+# main
+######
+
+sys.stdout.write("Applying background to " + char_image + " with threshold " + str(threshold) + "... ")
+sys.stdout.flush()
+
+image = Image.open(char_image).convert("L")
+
+bg_image = rand_image()
+
+image = set_bg(image, bg_image, threshold)
+
+image.save(char_image + "-bg.jpg")
+#image.show()
+
+sys.stdout.write(" Done.\n")
+
+         
\ No newline at end of file