summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Config/__init__.py1
-rwxr-xr-xPb/Generate/__init__.py189
-rwxr-xr-xPb/Gradient/__init__.py2
3 files changed, 69 insertions, 123 deletions
diff --git a/Config/__init__.py b/Config/__init__.py
index e834748..70e5887 100644
--- a/Config/__init__.py
+++ b/Config/__init__.py
@@ -13,6 +13,7 @@ DEFAULT_FINALFORMAT = "png";
DEFAULT_HEIGHT = 400
DEFAULT_WIDTH = 600
+OUTPUT_IMAGE_TYPES = ["png", "jpg", "gif" ]
#mounted on tmpfs
WORKING_DIR = "/var/www/cache"
diff --git a/Pb/Generate/__init__.py b/Pb/Generate/__init__.py
index 3aa9c6d..76082aa 100755
--- a/Pb/Generate/__init__.py
+++ b/Pb/Generate/__init__.py
@@ -3,6 +3,7 @@ import sys
import os
from Config import *
from Pb import Pb
+_default_tag = "im"
_gravity_params = ["NorthWest","North","NorthEast","West","Center","East","SouthWest","South","SouthEast"]
_gravity_default = "Center"
@@ -15,6 +16,7 @@ _dispose_default = "None"
class Im(Pb):
example_params = {
+#{{{ example params
'nearest': 'true',
# 'height': None,
'compose': 'Soft_Light',
@@ -41,27 +43,24 @@ class Im(Pb):
'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,
-
+ black="black",
+ white="white",
+ subtract="white",
#INTS
fuzz=None,
width=None,
@@ -71,145 +70,91 @@ class Im(Pb):
saturation=None,
rotate=None,
hue=None,
-
#ENUMS
- compose=None,
+ compose="Atop",
gravity=_gravity_default,
format=DEFAULT_FINALFORMAT,
-
+ dispose="None",
#STRINGS
username=None,
callback=None,
):
-#{{{ required_keys
- #IMAGES
- "url",
- "background",
-
- #BOOLS
- "coalesce",
- "dispose",
- "nearest",
- "merge_early",
- "flip",
- "flop",
- "tile",
- "transparent",
+ #IMAGES
+ self.params.set_val("url", url, value_type="image_url")
+ self.params.set_val("background", background, value_type="image_url")
- #COLORS
- "black",
- "white",
- "subtract",
-
- #INTS
- "fuzz",
- "width",
- "height",
- "brightness",
- "contrast",
- "saturation",
- "rotate",
- "hue",
-
- #ENUMS
- "compose",
- "gravity",
- "format",
+ #BOOLS
+ self.params.set_val("coalesce", coalesce, value_type="bool")
+ self.params.set_val("nearest", nearest, value_type="bool")
+ self.params.set_val("merge_early", merge_early, value_type="bool")
+ self.params.set_val("flip", flip, value_type="bool")
+ self.params.set_val("flop", flop, value_type="bool")
+ self.params.set_val("tile", tile, value_type="bool")
+ self.params.set_val("transparent", transparent, value_type="bool")
- #STRINGS
- "username",
- "callback",
-#}}}
- ]
- for k in self._required_keys:
- if k in kwargs:
- if k in [ 'url', 'background' ] and kwargs[k] != "" and kwargs[k] != None:
- self.params[k] = {
- 'url' : kwargs[k],
- 'filename' : self._make_tempname(k),
- 'path' : os.path.join(WORKING_DIR, self._make_tempname(k)) ,
- }
- try:
- self.download(self.params[k]['url'], self.params[k]['path'])
- self.files_created.append(self.params[k]['path'])
- self.params[k]['mimetype'] = self.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] = self.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] = self.bool_correct(self.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" ]:
- if kwargs[k] == '':
- self.params[k] = None
- else:
- try:
- self.params[k] = str(int(kwargs[k]))
- except Exception as e:
- raise Exception("Problem with param {}:\n".format(k) + str(e))
- else:
-
+ #COLORS
+ self.params.set_val("black", black, value_type="color")
+ self.params.set_val("white", white, value_type="color")
+ self.params.set_val("subtract", subtract, value_type="color")
- self.params[k] = self.sanitize(kwargs[k])
+ #INTS
+ self.params.set_val("fuzz", fuzz, value_type="int")
+ self.params.set_val("width", width, value_type="int")
+ self.params.set_val("height", height, value_type="int")
+ self.params.set_val("brightness", brightness, value_type="int")
+ self.params.set_val("contrast", contrast, value_type="int")
+ self.params.set_val("saturation", saturation, value_type="int")
+ self.params.set_val("rotate", rotate, value_type="int")
+ self.params.set_val("hue", hue, value_type="int")
+
+ #ENUMS
+ self.params.set_val("compose", compose, value_type="enum", enum_values=_compose_params)
+ self.params.set_val("gravity", gravity, value_type="enum", enum_values=_gravity_params)
+ self.params.set_val("dispose", dispose, value_type="enum", enum_values=_dispose_params)
+ self.params.set_val("format", format, value_type="enum", enum_values=OUTPUT_IMAGE_TYPES)
- if self.params.get('background'):
- self.tag = self.params.get('compose')
- else:
- self.tag = self.params.get('transparent', DEFAULT_TAG)
+ #STRINGS
+ self.params.set_val("username", username, value_type="string")
+ self.params.set_val("callback", callback, value_type="string")
- 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)
+ self.tag = _default_tag
+ if self.params.background: self.tag = self.params.compose
+ if self.params.transparent: self.tag = self.params.transparent
def _composite (self):
cmd = [
- BIN_CONVERT, self.params['background']['path'],
+ BIN_CONVERT, self.params.background['path'],
"null:", self.filepath, "-matte",
- "-dispose", self.params.get('dispose', DISPOSE_DEFAULT),
- "-gravity", self.params.get("gravity",GRAVITY_DEFAULT),
- "-compose", self.params['compose'], "-layers", "composite",
+ "-dispose", self.params.dispose,
+ "-gravity", self.params.gravity,
+ "-compose", self.params.compose, "-layers", "composite",
self.filepath ]
self._call_cmd(cmd);
def _convert(self):
- cmd = [BIN_CONVERT, self.params['url']['path'] ]
- if self.params.get('rotate'): cmd += ["-rotate", self.params['rotate'] ]
- if self.params.get('flip'): cmd += ["-flip"]
- if self.params.get('flop'): cmd += ["-flop"]
- if self.params.get('transparent'):
- if self.params.get('fuzz'):
- cmd += ["-fuzz", "{}%".format(self.params['fuzz']) ]
- cmd += [ "-transparent", self.params.get('subtract', "white") ]
- if self.params.get('width') or self.params.get('height'):
- if self.params.get('nearest') and self.params.get('format') == "gif":
+ cmd = [BIN_CONVERT, self.params.url['path'] ]
+ 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.subtract ]
+ if self.params.width or self.params.height:
+ if self.params.nearest and self.params.format == "gif":
cmd += [ "-coalesce","+map","-interpolate","Nearest","-interpolative-resize" ]
else:
cmd.append("-resize")
- cmd += [ "{}x{}".format(self.params.get('width',"") or "", self.params.get('height',"") or "") ]
- if self.params.get('black') != "black" or self.params.get('white') != 'white':
- cmd += [ "+level-colors" , "{},{}".format(self.params.get('black','black'), self.params.get('white', 'white')) ]
- if self.params.get('contrast'): cmd += [ '-contrast-stretch', self.params['contrast'] ]
- if any( e in self.params.keys() for e in ['brightness', 'saturation', 'hue' ]):
+ cmd += [ "{}x{}".format(self.params.width or "", self.params.height or "") ]
+ if self.params.black != "black" or self.params.white != 'white':
+ cmd += [ "+level-colors" , "{},{}".format(self.params.black, self.params.white) ]
+ if self.params.contrast: cmd += [ '-contrast-stretch', self.params.contrast ]
+ if self.params.brightness or self.params.saturation or self.params.hue:
cmd += [
"-modulate", "{},{},{}".format(
- (self.params.get('brightness', 100) or 100),
- (self.params.get('contrast', 100) or 100),
- (self.params.get('hue', 100) or 100)
+ (self.params.brightness or 100),
+ (self.params.contrast or 100),
+ (self.params.hue or 100)
)]
cmd.append("-coalesce"); #why? #FIXME
cmd += [ self.filepath ];
@@ -217,6 +162,6 @@ class Im(Pb):
def create(self):
self._convert()
- if self.params.get('background'):
+ if self.params.background:
self._composite()
self._cleanup();
diff --git a/Pb/Gradient/__init__.py b/Pb/Gradient/__init__.py
index e0a08b0..2ef8b93 100755
--- a/Pb/Gradient/__init__.py
+++ b/Pb/Gradient/__init__.py
@@ -89,7 +89,7 @@ class PbGradient(Pb):
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("filetype", filetype, value_type="enum", enum_values=OUTPUT_IMAGE_TYPES)
self.params.set_val("gradienttype", gradienttype, value_type="enum", enum_values=[
"default", "canvas", "radial", "colorspace",
"mirrored", "plasmawash", "gradientwash", "noise"