diff options
| author | yo mama <pepper@scannerjammer.com> | 2015-09-12 16:11:03 -0700 |
|---|---|---|
| committer | yo mama <pepper@scannerjammer.com> | 2015-09-12 16:11:03 -0700 |
| commit | aedbcd4a704c202fc4b2e2922713655840f421dd (patch) | |
| tree | be92b2e215533d08426eda20bfa9fc82d87fcf6c | |
| parent | 1b7af1e63f7a498835917bd76384ec68b744afc9 (diff) | |
ok pretty much done with gradient, moving on to generate
| -rwxr-xr-x | Pb/Break/__init__.py | 2 | ||||
| -rwxr-xr-x | Pb/Generate/__init__.py | 218 | ||||
| -rwxr-xr-x | Pb/Gradient/__init__.py | 135 | ||||
| -rw-r--r-- | Pb/__init__.py | 8 | ||||
| -rw-r--r-- | test.py | 4 |
5 files changed, 174 insertions, 193 deletions
diff --git a/Pb/Break/__init__.py b/Pb/Break/__init__.py index 9f5dba5..eced793 100755 --- a/Pb/Break/__init__.py +++ b/Pb/Break/__init__.py @@ -18,7 +18,7 @@ _header_offset = 2000 _default_breakmode = "subtle" class PbBreak(Pb): #FIXME in db gallery - _test_params = { + example_params = { "url" : "http://i.asdf.us/im/de/HolyMountain2_1322275112_seamonkey.gif", "breaktype" : "RGB_WASH", "finalformat" : "png", diff --git a/Pb/Generate/__init__.py b/Pb/Generate/__init__.py index 191d600..3aa9c6d 100755 --- a/Pb/Generate/__init__.py +++ b/Pb/Generate/__init__.py @@ -1,72 +1,124 @@ #!/usr/bin/python2.7 import sys import os - from Config import * from Pb import Pb -#FIXME these guys can do stuff wider than 1000 -LIKE_A_BOSS = "ryz pepper seamonkey JAMES".split(" ") -DEFAULT_FINALFORMAT = "gif" -DEFAULT_TAG = "im"; -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", +_gravity_params = ["NorthWest","North","NorthEast","West","Center","East","SouthWest","South","SouthEast"] +_gravity_default = "Center" +_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" - -def debuglog(s): - sys.stderr.write(str(s) + "\n"); +_dispose_params = ["None","Previous","Background"] +_dispose_default = "None" class Im(Pb): - def __init__(self, **kwargs): - self.params = {} - self._now = self.now() - self.files_created = [] - self.commands = []; - self._required_keys = [ + example_params = { + 'nearest': 'true', + # 'height': None, + 'compose': 'Soft_Light', + 'coalesce': 'true', + 'dispose': 'None', + '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' + } + def __init__(self, + #URLS + url=None, + background=None, + + #BOOLS + coalesce=None, + dispose="None", + nearest=None, + merge_early=None, + flip=None, + flop=None, + tile=None, + transparent=None, + + #COLORS + black=None, + white=None, + subtract=None, + + #INTS + fuzz=None, + width=None, + height=None, + brightness=None, + contrast=None, + saturation=None, + rotate=None, + hue=None, + + #ENUMS + compose=None, + gravity=_gravity_default, + format=DEFAULT_FINALFORMAT, + + #STRINGS + username=None, + callback=None, + ): #{{{ required_keys - #IMAGES - "url", - "background", + #IMAGES + "url", + "background", - #BOOLS - "coalesce", - "dispose", - "nearest", - "merge_early", - "flip", - "flop", - "tile", - "transparent", + #BOOLS + "coalesce", + "dispose", + "nearest", + "merge_early", + "flip", + "flop", + "tile", + "transparent", - #COLORS - "black", - "white", - "subtract", + #COLORS + "black", + "white", + "subtract", - #INTS - "fuzz", - "width", - "height", - "brightness", - "contrast", - "saturation", - "rotate", - "hue", - - #ENUMS - "compose", - "gravity", - "format", + #INTS + "fuzz", + "width", + "height", + "brightness", + "contrast", + "saturation", + "rotate", + "hue", + + #ENUMS + "compose", + "gravity", + "format", - #STRINGS - "username", - "callback", + #STRINGS + "username", + "callback", #}}} ] for k in self._required_keys: @@ -124,33 +176,6 @@ class Im(Pb): self.filename = "{}.{}".format(self.basename, self.params.get('format', DEFAULT_FINALFORMAT)) self.filepath = os.path.join(WORKING_DIR, self.filename) - 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: - self.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['background']['path'], @@ -195,36 +220,3 @@ class Im(Pb): if self.params.get('background'): self._composite() self._cleanup(); - -if __name__ == "__main__": - - TEST_PARAMS = { - 'nearest': 'true', -# 'height': None, - 'compose': 'Soft_Light', - 'coalesce': 'true', - 'dispose': 'None', - '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); - g.create() diff --git a/Pb/Gradient/__init__.py b/Pb/Gradient/__init__.py index 6640278..bde42ba 100755 --- a/Pb/Gradient/__init__.py +++ b/Pb/Gradient/__init__.py @@ -24,7 +24,7 @@ _halftone_values = { }
class PbGradient(Pb):
- _test_params = {
+ example_params = {
"width" : "200",
"color1" : "#ffdead",
"color2" : "blue",
@@ -44,7 +44,7 @@ class PbGradient(Pb): def __init__(self,
width=DEFAULT_WIDTH, height=DEFAULT_HEIGHT,
color1=_default_color_1, color2=_default_color_2,
- stripes=0,
+ stripes=False,
stripenumber=0,
stripeintensity=0,
blurriness=0,
@@ -66,7 +66,7 @@ class PbGradient(Pb): self.params.set_val("height", height, value_type="int")
self.params.set_val("color1", color1, value_type="color")
self.params.set_val("color2", color2, value_type="color")
- self.params.set_val("stripes", stripes, value_type="int")
+ self.params.set_val("stripes", stripes, value_type="bool")
self.params.set_val("stripenumber", stripenumber, value_type="int")
self.params.set_val("stripeintensity", stripeintensity, value_type="int")
self.params.set_val("blurriness", blurriness, value_type="int")
@@ -75,36 +75,30 @@ class PbGradient(Pb): self.params.set_val("saturation", saturation, value_type="int")
self.params.set_val("hue", hue, value_type="int")
- self.params.set_val("halftone", halftone, value_type="enum")
- self.params.set_val("bevel", bevel, value_type="enum")
+ self.params.set_val("halftone", halftone, value_type="enum", enum_values=[
+ "checkeredfade", "etchedtransition", "bendaydots",
+ "smallerdots1", "smallerdots2", "flatstripes",
+ ])
+ self.params.set_val("bevel", bevel, value_type="enum", enum_values=[
+ "flatout", "flatinner", "evenlyframed", "biginner",
+ "bigouter", "dramaticflatout", "dramaticflatinner",
+ ])
self.params.set_val("percentbeveled", percentbeveled, value_type="int")
- self.params.set_val("height", height, value_type="int")
- self.params.set_val("height", height, value_type="int")
- for key in PARAM_LIST:
- if key in kwargs:
- if key in ['color1', 'color2']:
- params[key] = self.is_color(kwargs[key])
- else:
- params[key] = self.sanitize(kwargs[key])
-
- if key in ['rotate','tilt','blurriness','stripenumber','stripeintensity']:
- params[key] = params[key] if self.is_number(params[key]) else ""
- elif key in ['brightness', 'contrast', 'hue']:
- if not self.is_number(params[key]) or params[key] == "100": params[key] = ""
- else:
- params[key] = ""
- params['width'] = params['width'] if self.is_number(params['width']) else DEFAULT_WIDTH
- params['height'] = params['height'] if self.is_number(params['height']) else DEFAULT_HEIGHT
- params["color1"] = params["color1"] or DEFAULT_COLORS["color1"];
- params["color2"] = params["color2"] or DEFAULT_COLORS["color2"];
- self.params = params
- if not self.params['percentbeveled']: self.params['percentbeveled'] = DEFAULT_BEVEL_PERCENT
- self._bevelvalues = [
- "flatout", "flatinner", "evenlyframed", "biginner",
- "bigouter", "dramaticflatout", "dramaticflatinner",
- ]
+ self.params.set_val("tilt", tilt, value_type="int")
+ self.params.set_val("rotate", rotate, value_type="int")
+ self.params.set_val("flip", flip, value_type="bool")
+ self.params.set_val("flop", flop, value_type="bool")
+
+ self.params.set_val("filetype", filetype, value_type="enum", enum_values=["gif", "png", "jpg"])
+ self.params.set_val("gradienttype", gradienttype, value_type="enum", enum_values=[
+ "default", "canvas", "radial", "colorspace",
+ "mirrored", "plasmawash", "gradientwash", "noise"
+ ])
+ self.params.set_val("username", username, value_type="string")
+
+ self.filename, self.filepath = self._filename_filepath_create()
- def _filename_create(self):
+ def _filename_create(self, **kwargs):
_base = "{}{}-{}_{}".format(
self.__class__.__name__,
self.params.color1.replace('#','').replace('(','-').replace(')','-'),
@@ -116,75 +110,76 @@ class PbGradient(Pb): def _build_cmd(self):
- self.cmd = [BIN_CONVERT]
- self.cmd.extend([
+ cmd = [BIN_CONVERT]
+ cmd.extend([
'-size',
- "{}x{}".format(self.params["width"],self.params["height"])
+ "{}x{}".format(self.params.width,self.params.height)
])
- if self.params['rotate']: self.cmd.extend(["-rotate", self.params["rotate"]])
- if self.params['tilt']: self.cmd.extend(["-distort","SRT",self.params['tilt']])
- if self.params['flip'] == "true": self.cmd.append("-flip")
- if self.params['flop'] == "true": self.cmd.append("-flop")
- if self.params['contrast']: self.cmd.extend(["-contrast-stretch", self.params['contrast']])
+ if self.params.rotate: cmd.extend(["-rotate", self.params.rotate])
+ if self.params.tilt: cmd.extend(["-distort","SRT",self.params.tilt])
+ if self.params.flip == "true": cmd.append("-flip")
+ if self.params.flop == "true": cmd.append("-flop")
+ if self.params.contrast: cmd.extend(["-contrast-stretch", self.params.contrast])
_gradients = {
- "default" : "gradient:{}-{}".format(self.params['color1'], self.params['color2']),
- "canvas" : ["canvas:{}".format(self.params['color1'])],
+ "default" : "gradient:{}-{}".format(self.params.color1, self.params.color2),
+ "canvas" : ["canvas:{}".format(self.params.color1)],
"radial" : [
- "radial-gradient:{}-{}".format( self.params['color1'], self.params['color2'])
+ "radial-gradient:{}-{}".format( self.params.color1, self.params.color2)
],
"colorspace" : [
"-colorspace",
"Gray",
- "plasma:{}-{}".format(self.params['color1'], self.params['color2'])
+ "plasma:{}-{}".format(self.params.color1, self.params.color2)
],
"mirrored" : [
- "plasma:{}-{}".format(self.params['color1'], self.params['color2']),
+ "plasma:{}-{}".format(self.params.color1, self.params.color2),
"\(","+clone","-flop","\)",
"append"
],
"plasmawash" : [
- "plasma:{}-{}".format(self.params['color1'], self.params['color2']),
+ "plasma:{}-{}".format(self.params.color1, self.params.color2),
"-set","colorspace","HSB"
],
"gradientwash" : [
- "gradient:{}-{}".format(self.params['color1'], self.params['color2']),
+ "gradient:{}-{}".format(self.params.color1, self.params.color2),
"-set","colorspace","HSB"
],
"noise" : ["xc:","+noise","Random","-virtual-pixel","tile"]
}
cmd += _gradients[self.params.gradienttype]
- if self.params['blurriness']:
- self.cmd.extend(["-blur","0x{}".format(self.params["blurriness"]),"-auto-level"])
+ if self.params.blurriness:
+ cmd.extend(["-blur","0x{}".format(self.params.blurriness),"-auto-level"])
- if self.params['stripes'] == "true" and len(self.params['stripenumber']):
- self.cmd.extend(["-function","Sinusoid"])
- if self.params['stripeintensity']:
- self.cmd.append("{},{}".format(self.params['stripenumber'],self.params["stripeintensity"]))
+ if self.params.stripes == "true" and len(self.params.stripenumber):
+ cmd.extend(["-function","Sinusoid"])
+ if self.params.stripeintensity:
+ cmd.append("{},{}".format(self.params.stripenumber,self.params.stripeintensity))
else:
- self.cmd.append(self.params['stripenumber'])
- if self.params["halftone"] in HALFTONEVALUES:
- self.cmd.extend([
+ cmd.append(self.params.stripenumber)
+ if self.params.halftone in _halftone_values:
+ cmd.extend([
"-ordered-dither",
- HALFTONEVALUES[self.params["halftone"]]
+ _halftone_values[self.params.halftone]
])
- self.cmd += [
+ cmd += [
'-modulate',
"{},{},{}".format(
- self.params['brightness'] or "100",
- self.params['saturation'] or "100",
- self.params['hue'] or "100")
+ self.params.brightness or "100",
+ self.params.saturation or "100",
+ self.params.hue or "100")
]
- self.cmd.append(os.path.join(self.directory,self.filename));
- self._call_cmd(self.cmd)
+ cmd.append(self.filepath);
+ self._call_cmd(cmd)
+ if self.params.bevel: self._make_bevel()
def _get_bevelvalue(self):
- w, h = map(int, (self.params['width'], self.params['height']))
+ w, h = map(int, (self.params.width, self.params.height))
if h >= w:
- bevpercentval = str(int(self.params['percentbeveled'])*0.005*int(h))
+ bevpercentval = str(int(self.params.percentbeveled)*0.005*int(h))
else:
- bevpercentval = str(int(self.params['percentbeveled'])*0.005*int(w))
+ bevpercentval = str(int(self.params.percentbeveled)*0.005*int(w))
return {
"flatout": ["-s",bevpercentval,"-m","outer"],
"flatinner": ["-s",bevpercentval,"-m","inner"],
@@ -193,20 +188,14 @@ class PbGradient(Pb): "bigouter": ["-s",bevpercentval,"-m","split","-c","50","-b","red","-a","25"],
"dramaticflatout": ["-s",bevpercentval,"-m","outer","-a","25","-b","blue"],
"dramaticflatinner": ["-s",bevpercentval,"-m","outer","-a","25","-b","blue"],
- }[self.params['bevel']]
+ }[self.params.bevel]
def _make_bevel(self):
cmd = [BEVELBORDER]
cmd += self._get_bevelvalue()
- cmd += [ os.path.join(self.directory,self.filename), os.path.join(self.directory, self.filename) ]
+ cmd += [ self.filepath]
self._call_cmd(cmd)
def create(self):
- self.filename = self.newfilename()
- self.filepath = os.path.join(self.directory, self.filename)
self._build_cmd()
-# sys.stderr.write(str(self.cmd))
-
- if self.params['bevel'] in self._bevelvalues:
- self._make_bevel()
diff --git a/Pb/__init__.py b/Pb/__init__.py index af4558f..607362f 100644 --- a/Pb/__init__.py +++ b/Pb/__init__.py @@ -108,10 +108,10 @@ class Pb(object): sys.exit(1); @classmethod - def test(cls, test_params=None): - test_params = test_params or cls._test_params - if not test_params: + def example_run(cls, params=None): + example_params = params or cls.example_params + if not example_params: raise AttributeError ("Must supply test params to test %s" % cls.__name__) - b = cls(**test_params) + b = cls(**example_params) b.create(); @@ -1,2 +1,2 @@ -from Pb.Break import PbBreak -PbBreak.test() +from Pb.Gradient import PbGradient +PbGradient.example_run() |
