summaryrefslogtreecommitdiff
path: root/generate.py
diff options
context:
space:
mode:
authoryo mama <pepper@scannerjammer.com>2015-05-01 14:32:07 -0700
committeryo mama <pepper@scannerjammer.com>2015-05-01 14:32:07 -0700
commite6e2eaeaa12cbc1db19aa76e3f610d0713a7d75a (patch)
tree38c6dadff1c2a6e99ccfb791077b2943e73e95d6 /generate.py
parented134d6412c3ee32357f0582ee095f61210d637b (diff)
looking good
Diffstat (limited to 'generate.py')
-rwxr-xr-xgenerate.py230
1 files changed, 0 insertions, 230 deletions
diff --git a/generate.py b/generate.py
deleted file mode 100755
index 1bc1655..0000000
--- a/generate.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/python2.7
-import sys
-import os
-
-from pb.config import *
-import pb.lib.utils as utils
-
-#FIXME these guys can do stuff wider than 1000
-LIKE_A_BOSS = "ryz pepper seamonkey JAMES".split(" ")
-DEFAULT_FINALFORMAT = "gif"
-DB_TAG = "pb";
-
-GRAVITY_PARAMS = ["NorthWest","North","NorthEast","West","Center","East","SouthWest","South","SouthEast"]
-GRAVITY_DEFAULT = "center"
-FORMAT_PARAMS = ["jpg", "gif", "png"]
-COMPOSE_PARAMS = [ "Over", "ATop", "Dst_Over", "Dst_In", "Dst_Out", "Multiply",
- "Screen", "Divide", "Plus", "Difference", "Exclusion",
- "Lighten", "Darken", "Overlay", "Hard_Light", "Soft_Light",
- "Linear_Dodge", "Linear_Burn", "Color_Dodge", "Color_Burn" ]
-DISPOSE_PARAMS = ["None","Previous","Background"]
-DISPOSE_DEFAULT = "None"
-
-class Generate():
- def __init__(self, **kwargs):
- self.params = {}
- self.now = utils.now()
- self.files_created = []
- self.commands = [];
- self._required_keys = [
-#{{{ required_keys
- #IMAGES
- "url",
- "background",
-
- #BOOLS
- "coalesce",
- "dispose",
- "nearest",
- "merge_early",
- "flip",
- "flop",
- "tile",
- "transparent",
-
- #COLORS
- "black",
- "white",
- "subtract",
-
- #INTS
- "fuzz",
- "width",
- "height",
- "brightness",
- "contrast",
- "saturation",
- "rotate",
- "hue",
-
- #ENUMS
- "compose",
- "gravity",
- "format",
-
- #STRINGS
- "name",
- "callback",
-#}}}
- ]
- for k in self._required_keys:
- if k in kwargs:
- if k in [ 'url', 'background' ] and utils.bool_correct(kwargs[k]):
- self.params[k] = {
- 'url' : kwargs[k],
- 'filename' : self._make_tempname(k),
- 'path' : os.path.join(WORKING_DIR, self._make_tempname(k)) ,
- }
- try:
- utils.download(self.params[k]['url'], self.params[k]['path'])
- self.files_created.append(self.params[k]['path'])
- self.params[k]['mimetype'] = utils.get_mimetype(self.params[k]['path'])
- except Exception as e:
- sys.stderr.write(str(e))
- raise Exception ("BAD PARAMS");
- elif k in [ 'black', 'white', 'subtract' ]:
- try:
- self.params[k] = utils.is_color(kwargs[k])
- except Exception:
- raise Exception("Unable to process color for:\n{}".format(k))
- elif k in [
- "coalesce", "dispose", "nearest", "merge_early",
- "flip", "flop", "tile", "transparent",
- ]:
- self.params[k] = utils.bool_correct(utils.sanitize(kwargs[k]))
- elif k == 'gravity' and self._test_enum(kwargs[k], GRAVITY_PARAMS):
- self.params[k] = kwargs[k]
- elif k == 'format' and self._test_enum(kwargs[k], FORMAT_PARAMS):
- self.params[k] = kwargs[k]
- elif k == 'compose' and self._test_enum(kwargs[k], COMPOSE_PARAMS):
- self.params[k] = kwargs[k]
- elif k == 'dispose' and self._test_enum(kwargs[k], DISPOSE_PARAMS):
- self.params[k] = kwargs[k]
- elif k in [ "fuzz", "width", "height", "brightness", "contrast", "saturation", "rotate", "hue" ]:
- self.params[k] = int(kwargs[k])
- else:
- self.params[k] = utils.sanitize(kwargs[k])
- else:
- self.params[k] = None;
-
- self.basename = self._get_filename();
-
- self.filename = "{}.{}".format(self.basename, self.params.get('format', DEFAULT_FINALFORMAT))
- self.filepath = os.path.join(WORKING_DIR, self.filename)
-
- if self.params['bgfile']:
- self.tag = self.params['compose']
- else:
- self.tag = self.params['transparent'] or "im"
-
- def _make_tempname(self, s):
- return "PBTMP{}{}".format(self.now, s);
-
- def _test_enum(self, e, arr):
- if e in arr: return True
- raise Exception ("Bad value: {}".format(e))
-
- def _get_filename(self):
- return "{}_{}_{}".format(
- self.tag,
- self.now,
- self.params.get('username',"")
- );
-
- def _call_cmd(self, cmd):
- try:
- utils.call_cmd(cmd)
- self.commands.append(" ".join(cmd));
- except Exception:
- raise Exception("Unable to call cmd {}".format(str(cmd)))
-
- def _cleanup(self):
- if not len(self.files_created):
- pass
- cmd = ["rm", "-f"] + self.files_created
- self._call_cmd(cmd)
-
- def _composite (self):
- cmd = [
- BIN_CONVERT, self.params['bgfile'],
- "null:", self.filepath, "-matte",
- "-dispose", self.params.get('dispose', DISPOSE_DEFAULT),
- "-gravity", self.params.get("gravity",GRAVITY_DEFAULT),
- "-compose", self.params['compose'], "-layers", "composite",
- self.filename ]
- self._call_cmd(cmd);
-
- def bin_convert (self, params, oldfile, newfile):
- cmd = [BIN_CONVERT, oldfile]
- cmd.extend(params)
- cmd.append(newfile)
- self._call_cmd(cmd);
-
- def _convert(self):
- cmd = []
- if self.params['rotate']: cmd += ["-rotate", self.params['rotate'] ]
- if self.params['flip']: cmd += ["-flip"]
- if self.params['flop']: cmd += ["-flop"]
- if self.params['transparent']:
- if self.params['fuzz']:
- cmd += ["-fuzz", "{}%".format(self.params['fuzz']) ]
- cmd += [ "-transparent", self.params.get('subtract', "white") ]
- if self.params['width'] or self.params['height']:
- if self.params['nearest']:
- if self.params['format'] == "gif":
- cmd += [ "-coalesce","+map","-interpolate","Nearest","-interpolative-resize" ]
- else:
- cmd.append("-resize")
- cmd.append("{}x{}".format(self.params.get('width',''), self.params.get('height','')))
- if self.params['black'] != "black" or self.params['white'] != 'white':
- cmd += [ "+level-colors" , "{},{}".format(self.params['black'], self.params['black']) ]
- if self.params['contrast']: cmd += [ '-contrast-stretch', self.params['contrast'] ]
- if any( e in self.params.keys for e in ['brightness', 'saturation', 'hue' ]):
- cmd += [
- "{},{},{}".format(
- self.params.get('brightness', 100),
- self.params.get('contrast', 100),
- self.params.get('hue', 100)
- ),
- "-modulate" ]
- cmd.append("-coalesce"); #why? #FIXME
- self._call_cmd(cmd);
-
- def create(self):
- if self._convert();
- if self.params['bgfile']:
- self._composite()
-
-##remove(newfile)
-if __name__ == "__main__":
-
- TEST_PARAMS = {
- 'nearest': 'true',
-# 'height': None,
- 'compose': 'Soft_Light',
- 'coalesce': 'true',
- 'dispose': 'true',
- 'gravity': 'Center',
- 'width': '200',
- 'black': 'black',
- 'tile': 'true',
- 'white': 'white',
- 'contrast': '100',
- 'hue': '90',
- 'saturation': '100',
- 'merge_early': 'true',
- 'format': 'gif',
- 'background': 'http://i.asdf.us/im/bc/new_1430440747.gif',
- 'subtract': '#EE7AE9',
- 'transparent': 'true',
-# 'rotate': None,
- 'name': 'yo',
-# 'brightness': None,
- 'url': 'http://asdf.us/im/new.gif',
- 'flop': 'true',
- 'flip': 'false',
- 'callback': 'jsonp1430442384162',
- 'fuzz': '5'
- }
- g = Generate(**TEST_PARAMS);
-