summaryrefslogtreecommitdiff
path: root/share/frontend/impattern/makePattern.py
diff options
context:
space:
mode:
authoryo mama <pepper@scannerjammer.com>2015-09-22 00:51:40 -0700
committeryo mama <pepper@scannerjammer.com>2015-09-22 00:51:40 -0700
commitd3e7b5708deffbed864c916de22663f48333c58b (patch)
treeef76784a7827baff88c03670bf22832a3f146b17 /share/frontend/impattern/makePattern.py
parent86c79f4372d7b2e7640a26473c7a4d331cdf7d16 (diff)
finishing server
Diffstat (limited to 'share/frontend/impattern/makePattern.py')
-rwxr-xr-xshare/frontend/impattern/makePattern.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/share/frontend/impattern/makePattern.py b/share/frontend/impattern/makePattern.py
new file mode 100755
index 0000000..98d298b
--- /dev/null
+++ b/share/frontend/impattern/makePattern.py
@@ -0,0 +1,111 @@
+#!/usr/bin/python2.7
+
+import sys
+import cgi
+from os import getpid, path
+from subprocess import call, Popen, PIPE
+import time
+
+MAIN_DIRECTORY = ""
+BIN_CONVERT = "convert"
+BIN_IDENTIFY = "identify"
+BIN_COMPOSITE = "composite"
+ACCEPTABLE_FILE_TYPES = [".png", ".jpg", ".gif", ".jpeg"]
+
+def usage():
+ sys.stderr.write("$>makePattern.py [ input_file ] [ pattern_file ] [ username ]");
+
+def now():
+ return str(int(time.time()))
+
+def image_dimensions_and_test(filename):
+ ident = Popen([BIN_IDENTIFY, filename], stdout=PIPE).communicate()[0]
+ partz = ident.split(" ")
+ filetype = "."+partz[1]
+ size = partz[6]
+ if filetype.lower() not in ACCEPTABLE_FILE_TYPES:
+ error("file was not an image")
+ return partz[2].split("x")
+
+def error(s):
+ " returns an error and exits the program "
+ print("ERROR: "+s)
+ exit(1)
+
+def hexdir(filename):
+ " creates a two-letter directory name "
+ return sha1(filename.encode()).hexdigest()[:2]
+#repage command convert original.png -resize 425x92 -repage 425x92+0+0 new.png
+
+class Pattern:
+
+ def __init__(self):
+ self.nametag = "imPattern";
+ self.pid = str(getpid())
+ self.pattern_file = "";
+ self.original_file = "";
+ self.username = "";
+ self.commands = [];
+
+ def makeResultFilename(self):
+ file_base, extension = path.splitext(self.original_file)
+ if len(file_base) > self.MAX_NAME_LENGTH:
+ file_base = file_base[0:self.MAX_NAME_LENGTH]
+ return "%s_%s_%s%s%s" % (file_base, self.username, self.nametag, now(), extension)
+
+ #first step
+ def makeCanvas(self):
+ call([BIN_CONVERT,"-size",self.dimensions[0]+"x"+self.dimensions[1],"canvas:transparent", self.canvas_file])
+
+ #second step use the Canvas as a background
+ def makeMask(self):
+ #tile the pattern pattern on the canvas
+ command = [BIN_COMPOSITE,"-tile", self.pattern_file, self.canvas_file, self.mask_file];
+ call(command)
+ self.commands.append(command)
+ #fuse the tiled file to create a mask
+ #convert thebg.gif -compose Dst_In null: thefile.gif -matte -layers composite new.gif
+ command = [BIN_CONVERT, self.mask_file, "-compose", "Dst_In", "null:", self.original_file, "-matte", "-layers", "composite", self.mask_file]
+ call(command)
+
+ #cleanup
+ call(["rm", self.canvas_file])
+
+ #third step
+ def fuseMask(self, fuse_mode="Pin_Light"):
+ call([BIN_CONVERT, self.mask_file, "null:", self.original_file, "-matte", "-compose", fuse_mode, "-layers", "composite", self.result_file])
+ call(["rm", self.mask_file])
+
+ def main(self, input_file_path, pattern_file, username=""):
+ self.pattern_file = pattern_file;
+ self.original_file = input_file_path;
+ self.username = username;
+ self.MAX_NAME_LENGTH = 10;
+
+ self.image_format = self.original_file.split(".")[-1]
+ self.dimensions = ""
+ try:
+ self.dimensions = image_dimensions_and_test(self.original_file);
+ except Exception as e:
+ sys.stderr.write(str(e));
+ error("Unable to determine dimensions")
+ self.canvas_file = self.pid+"blank_canvas.png";
+ self.makeCanvas();
+ self.mask_file = self.pid+"mask_file"+"."+self.image_format;
+ self.makeMask();
+ self.result_file = self.makeResultFilename();
+ self.fuseMask();
+
+if __name__ == "__main__":
+ p = Pattern();
+ if len(sys.argv) < 2 or len(sys.argv) > 3:
+ usage();
+ sys.exit(0);
+ input_file_path = sys.argv[1]
+ pattern_file = sys.argv[2]
+ username = "";
+# username = sys.argv[3]
+ print input_file_path;
+ print pattern_file;
+ print username;
+ p.main(input_file_path, pattern_file, username);