summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Params/__init__.py2
-rwxr-xr-xPb/Generate/__init__.py29
-rwxr-xr-xPb/Grid/__init__.py84
-rwxr-xr-xPb/Landscape/__init__.py66
-rwxr-xr-xPb/Pattern/__init__.py115
-rw-r--r--test.py4
6 files changed, 82 insertions, 218 deletions
diff --git a/Params/__init__.py b/Params/__init__.py
index 2c94460..dc8fbfa 100644
--- a/Params/__init__.py
+++ b/Params/__init__.py
@@ -66,6 +66,8 @@ class Params(object):
elif value_type == "enum":
if value not in enum_values:
raise ValueError
+ elif value_type == "json":
+ pass
self.__setattr__(key, value)
except Exception as e:
self.err_warn("key: %s value: %s" % (key, value), error=str(e))
diff --git a/Pb/Generate/__init__.py b/Pb/Generate/__init__.py
index 76082aa..0062652 100755
--- a/Pb/Generate/__init__.py
+++ b/Pb/Generate/__init__.py
@@ -14,7 +14,7 @@ _compose_params = [ "Over", "ATop", "Dst_Over", "Dst_In", "Dst_Out", "Multiply",
_dispose_params = ["None","Previous","Background"]
_dispose_default = "None"
-class Im(Pb):
+class PbGenerate(Pb):
example_params = {
#{{{ example params
'nearest': 'true',
@@ -76,12 +76,13 @@ class Im(Pb):
format=DEFAULT_FINALFORMAT,
dispose="None",
#STRINGS
- username=None,
+ name=None,
callback=None,
):
+ super(PbGenerate,self).__init__();
#IMAGES
- self.params.set_val("url", url, value_type="image_url")
- self.params.set_val("background", background, value_type="image_url")
+ self.params.set_val("url", url, value_type="img_url")
+ self.params.set_val("background", background, value_type="img_url")
#BOOLS
self.params.set_val("coalesce", coalesce, value_type="bool")
@@ -98,14 +99,14 @@ class Im(Pb):
self.params.set_val("subtract", subtract, value_type="color")
#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")
+ self.params.set_val("fuzz", fuzz or 0, value_type="int")
+ self.params.set_val("width", width or 0, value_type="int")
+ self.params.set_val("height", height or 0, value_type="int")
+ self.params.set_val("brightness", brightness or 0, value_type="int")
+ self.params.set_val("contrast", contrast or 0, value_type="int")
+ self.params.set_val("saturation", saturation or 0, value_type="int")
+ self.params.set_val("rotate", rotate or 0, value_type="int")
+ self.params.set_val("hue", hue or 0, value_type="int")
#ENUMS
self.params.set_val("compose", compose, value_type="enum", enum_values=_compose_params)
@@ -114,13 +115,15 @@ class Im(Pb):
self.params.set_val("format", format, value_type="enum", enum_values=OUTPUT_IMAGE_TYPES)
#STRINGS
- self.params.set_val("username", username, value_type="string")
+ self.params.set_val("username", name, value_type="string")
self.params.set_val("callback", callback, value_type="string")
self.tag = _default_tag
if self.params.background: self.tag = self.params.compose
if self.params.transparent: self.tag = self.params.transparent
+ self.filename, self.filepath = self._filename_filepath_create(url=self.params.url['url'], extension=self.params.format)
+
def _composite (self):
cmd = [
BIN_CONVERT, self.params.background['path'],
diff --git a/Pb/Grid/__init__.py b/Pb/Grid/__init__.py
index 09718bd..b2c8bdd 100755
--- a/Pb/Grid/__init__.py
+++ b/Pb/Grid/__init__.py
@@ -11,7 +11,17 @@ from Pb import Pb
_default_line_color = "silver"
-class Imgrid(Pb):
+class PbGrid(Pb):
+ example_params = {
+ 'bgimage' : 'http://i.asdf.us/im/1a/imBreak_1424909483_xx_abridged___.gif',
+ 'planebgimage' : 'http://i.imgur.com/FICZtph.png',
+ 'tilt' : '30',
+ 'spacing' : '30',
+ 'hlines' : 'true',
+ 'roll' : '30',
+ 'shadow' : 'true',
+ 'trim' : 'true'
+ }
def __init__(self,
width=None,
height=None,
@@ -37,41 +47,23 @@ class Imgrid(Pb):
finalformat=DEFAULT_FINALFORMAT,
username=None
):
- super(Imgrid,self).__init__();
-
- _frame = inspect.currentframe();
- _args_vals = inspect.getargvalues(_frame);
- for arg in _args_vals.args:
- if arg == "self":
- continue
- argval = _args_vals.locals.get(arg)
- try:
- if arg in [ 'skycolor', 'bgcolor', 'planebgcolor','linecolor' ]:
- self.params.set_val(arg, argval, value_type="color")
- elif arg == 'opacity':
- self.params.set_val(arg, argval, value_type="float")
- elif arg == 'zoom':
- self.params.set_val(arg, argval, value_type="int")
- elif arg in [ 'bgimage', 'planebgimage', 'imageinstead' ]:
- self.params.set_val(arg, argval, value_type="img_url")
- if self.params.get_mimetype(arg) == 'gif':
- self.params.gif_convert_to_still(arg)
- self.files_created.append(self.params.get_filepath(arg))
- elif arg in ['finalformat', 'username' ] :
- self.params.set_val(arg, argval, value_type="string")
- else:
- self.params.set_val(arg, argval, value_type="bool")
-
- except Exception as e:
- self.log_err(str(e))
-
- #FIXME these need to be bumped up to the parent class
- self.basename = self._get_filename();
- self.filename = "{}.{}".format(self.basename, self.params.finalformat)
- #final filepath is stored in self.filepath
- self.filepath = os.path.join(WORKING_DIR, self.filename)
-
-
+ super(PbGrid,self).__init__();
+ self.params.set_val("skycolor", skycolor, value_type="color")
+ self.params.set_val("bgcolor", bgcolor, value_type="color")
+ self.params.set_val("planebgcolor", planebgcolor, value_type="color")
+ self.params.set_val("linecolor", linecolor, value_type="color")
+ self.params.set_val("opacity", opacity, value_type="float")
+ self.params.set_val("zoom", zoom, value_type="int")
+ self.params.set_val("bgimage", bgimage, value_type="img_url")
+ self.params.set_val("planebgimage", planebgimage, value_type="img_url")
+ self.params.set_val("imageinstead", imageinstead, value_type="img_url")
+#FIXME choose gif frame
+ self.params.set_val("spacing", spacing, value_type="bool")
+ self.params.set_val("vlines", vlines, value_type="bool")
+ self.params.set_val("hlines", hlines, value_type="bool")
+ self.params.set_val("shadow", shadow, value_type="bool")
+ self.params.set_val("finalformat", finalformat, value_type="string")
+ self.params.set_val("username", username, value_type="string")
#makes a canvas file...step 1 (if not bgimage)
def _make_canvas(self):
@@ -157,12 +149,6 @@ class Imgrid(Pb):
]
self._call_cmd(cmd)
- def _cleanup(self):
- if not len(self.files_created):
- return
- cmd = ["rm", "-f"] + self.files_created
- self._call_cmd(cmd)
-
def create(self):
if self.params.bgimage:
self._prepare_gridimage(self.params.bgimage)
@@ -177,17 +163,3 @@ class Imgrid(Pb):
if self.params.planebgimage: self._overlay_planebgimage()
if self.params.trim: self._trim_cmd()
self._cleanup()
-
-if __name__ == "__main__":
- g = Imgrid(**{
- 'bgimage' : 'http://i.asdf.us/im/1a/imBreak_1424909483_xx_abridged___.gif',
- 'planebgimage' : 'http://i.imgur.com/FICZtph.png',
- 'tilt' : '30',
- 'spacing' : '30',
- 'hlines' : 'true',
- 'roll' : '30',
- 'shadow' : 'true',
- 'trim' : 'true'
- })
- g.create()
- print g.commands
diff --git a/Pb/Landscape/__init__.py b/Pb/Landscape/__init__.py
index 59212a6..e285fb5 100755
--- a/Pb/Landscape/__init__.py
+++ b/Pb/Landscape/__init__.py
@@ -1,62 +1,26 @@
-#!/usr/bin/python2.7
import sys
-import random
import re
-import urllib
-import urlparse
from Config import *
import Pb
import base64
-import time
-import string
-from subprocess import Popen, PIPE
-import sha
-import simplejson as json
from Pb import Pb
-import mimetypes
-
-class Imlandscape(Pb):
- def __init__(self, **kwargs):
- sys.stderr.write("inside init");
- sys.stderr.write(str(kwargs))
- return;
- self.params = {}
- self.tag = "imlandscape"
- self.commands = [];
- self._required_keys = [
- "heightmap",
- "imgdata",
- "texture",
- "name",
- ]
- self._now = self.now()
- self.files_created = []
- for k in self._required_keys:
- if k in kwargs:
- self.params[k] = kwargs[k]
- else:
- self.params[k] = self.bool_correct(self.sanitize(kwargs[k]))
-
- def _filename_from_url (self, url, name=""):
- if "?" in url:
- url = url.split("?")[0]
- if "/" in url:
- url = urllib.unquote(url).replace(" ","")
- filename = url.split("/")[-1]
- filetype = "png"
- filename = sanitize(filename[:-4])
- else:
- filename = ""
- if name != "":
- name = name+"_"
- return "{}_{}{}_{}.{}".format("imlandscape", name, filename,self._now, "png")
+class PbLandscape(Pb):
+ def __init__(self,
+ heightmap=None,
+ imgdata=None,
+ texture=None,
+ name=None,
+ ):
+ self._required_keys = [
+ "heightmap",
+ "imgdata",
+ "texture",
+ "name",
+ ]
def _saveImgData(self, imgdata, filename):
try:
-# up = urlparse.urlparse(url)
-# head, data = imgdata.split(',', 1)
-# bits = head.split(';')
parts = imgdata.split(';')
mime_type = parts[0] if parts[0] else 'text/plain'
data = parts[1]
@@ -77,10 +41,6 @@ class Imlandscape(Pb):
except Exception as e:
sys.stderr.write("ERROR: {}\n".format(str(e)));
-# def _cleanup(self):
-# cmd = ["rm"]+self.files_created
-# self._call_cmd(cmd)
-
def create(self, breakmode=""):
self.filepath = self._filename_from_url(self.params.get('texture',""), self.params.get('name',""));
self._saveImgData(self.params.get('imgdata'), self.filepath);
diff --git a/Pb/Pattern/__init__.py b/Pb/Pattern/__init__.py
index 7c53746..0018fd9 100755
--- a/Pb/Pattern/__init__.py
+++ b/Pb/Pattern/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/python2.7
import os
import sys
import random
@@ -13,50 +12,33 @@ import uuid
_fuse_mode="Pin_Light"
-class Impattern(Pb):
- def __init__(self, **kwargs):
- self.params = {}
- self.tag = "imPattern";
- self._pid = str(os.getpid())
- self.commands = [];
- self._now = self.now()
- self.height = ""
- self.width = ""
- self._required_keys = [
- #FIXME change name to username in js
- #FIXME change js api
- "pattern_url",
- "pattern_data",
- "username",
- "image_url",
- ]
- self.files_created = []
- for k in self._required_keys:
- if k in kwargs:
- if k in [ 'pattern_url', 'image_url' ]:
- self.params[k] = kwargs[k]
- elif k == 'pattern_data':
- self.params[k] = kwargs[k] #FIXME add conversion data
- else:
- self.params[k] = self.sanitize(kwargs[k])
- else:
- self.params[k] = False;
-
- if not self.params['image_url']:
- sys.stderr.write('no image url');
- raise ValueError
- self.params = self.make_dotdict(self.params)
+class PbPattern(Pb):
+ example_params = {
+ # "pattern_url" : "http://asdf.us/impattern/patterns/1.png",
+ "pattern_data" : '{"matrix":[["0","0","0","0","0","1","0","0","0","0"],["0","0","0","0","1","1","1","0","0","0"],["0","0","1","1","1","0","1","0","0","0"],["0","1","1","0","0","0","0","0","0","0"],["0","1","0","0","1","0","0","0","0","0"],["0","1","0","0","1","0","0","0","1","0"],["0","1","0","0","1","1","0","0","1","0"],["0","1","0","0","0","1","1","1","1","0"],["0","1","1","1","1","0","0","0","0","0"],["0","0","0","0","1","0","0","0","0","0"]],"width":"10","height":"10"}',
+ # "username" : "garfield",
+ "image_url" : "http://i.asdf.us/im/be/PinkHijab_1425078647_reye.gif",
+ }
+ def __init__(self,
+ pattern_url=None,
+ pattern_data=None,
+ username=None,
+ image_url=None,
+ ):
+ super(PbPattern,self).__init__();
+
+ self.params.set_val("image_url", url, value_type="img_url");
+ self.params.set_val("pattern_url", url, value_type="img_url");
+ self.params.set_val("pattern_data", url, value_type="json");
+ self.params.set_val("username", username, value_type="string");
self.basename, self._format = self._get_filename();
#FIXME omit file extension for downloaded files
- self._downloaded_file = os.path.join(WORKING_DIR, "IMPATTERNTMP_DL{}_{}.{}".format(self.basename, self._pid, self._format)) # same here
#lets go back to this in a second
self._pattern_file = os.path.join(WORKING_DIR, "IMPATTERNTMP_PTN{}_{}.{}".format(self.basename, self._pid, self._format)) # this
self._download(self.params.image_url, self._downloaded_file)
- self.width, self.height = self.dimensions(self._downloaded_file) # same here
-
self.filename = "{}.{}".format(self.basename, self._format)
self.filepath = os.path.join(WORKING_DIR, self.filename)
@@ -68,21 +50,6 @@ class Impattern(Pb):
sys.stderr.write("pattern must be supplied as json array or as a png url")
raise ValueError;
- def _download(self, url, dest):
- try:
- self.download(url, dest)
- self.files_created.append(dest)
- except Exception as e:
- sys.stderr.write(str(e))
- raise;
-
- 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 _from_pattern_data(self):
def boolToColor(boolean):
if boolean:
@@ -101,40 +68,10 @@ class Impattern(Pb):
img.save(self._pattern_file, "PNG")
-
- def _get_filename (self):
- url = self.params.image_url
- name_part = "";
- file_format = "";
- if "?" in url:
- url = url.split("?")[0]
- if "/" in url:
- url = urllib.unquote(url).replace(" ","")
- name_part = url.split("/")[-1]
- try:
- parts = name_part.split(".")
- name_part = self.sanitize(parts[-2])
- file_format = self.sanitize(parts[-1])
- if not name_part or not file_format:
- sys.stderr.write( "Incompatible input file type")
- raise;
- except Exception as e:
- sys.stderr.write( "Incompatible input file type")
- raise;
- else:
- sys.stderr.write( "Incompatible url")
- raise;
- if (len(name_part) > 20):
- name_part = name_part[:-20]
- return "{}{}_{}_{}".format(self.tag, name_part, self._now, self.params.username or ""), file_format
-
- def _cleanup(self):
- cmd = ["rm"]+self.files_created
- self._call_cmd(cmd)
-
#first step
def _make_canvas(self):
- cmd = [BIN_CONVERT,"-size",self.width+"x"+self.height,"canvas:transparent", self.filepath]
+ _width, _height = self.dimensions(self._downloaded_file) # same here
+ cmd = [BIN_CONVERT, "-size", _width + "x" + _height, "canvas:transparent", self.filepath]
self._call_cmd(cmd)
#second step use the Canvas as a background
@@ -160,13 +97,3 @@ class Impattern(Pb):
self._make_mask()
self._fuse_mask();
-if __name__ == "__main__":
- TEST_PARAMS = {
- # "pattern_url" : "http://asdf.us/impattern/patterns/1.png",
- "pattern_data" : '{"matrix":[["0","0","0","0","0","1","0","0","0","0"],["0","0","0","0","1","1","1","0","0","0"],["0","0","1","1","1","0","1","0","0","0"],["0","1","1","0","0","0","0","0","0","0"],["0","1","0","0","1","0","0","0","0","0"],["0","1","0","0","1","0","0","0","1","0"],["0","1","0","0","1","1","0","0","1","0"],["0","1","0","0","0","1","1","1","1","0"],["0","1","1","1","1","0","0","0","0","0"],["0","0","0","0","1","0","0","0","0","0"]],"width":"10","height":"10"}',
- # "username" : "garfield",
- "image_url" : "http://i.asdf.us/im/be/PinkHijab_1425078647_reye.gif",
- }
- p = Pattern(**TEST_PARAMS)
- p.create()
-
diff --git a/test.py b/test.py
index be62d3f..df273cf 100644
--- a/test.py
+++ b/test.py
@@ -1,3 +1,3 @@
-from Pb.Gradient import PbGradient
-PbGradient.example_run()
+from Pb.Generate import PbGenerate
+PbGenerate.example_run()