diff options
Diffstat (limited to 'Pb/Pattern/__init__.py')
| -rwxr-xr-x | Pb/Pattern/__init__.py | 45 |
1 files changed, 17 insertions, 28 deletions
diff --git a/Pb/Pattern/__init__.py b/Pb/Pattern/__init__.py index 0018fd9..3a094dd 100755 --- a/Pb/Pattern/__init__.py +++ b/Pb/Pattern/__init__.py @@ -15,11 +15,11 @@ _fuse_mode="Pin_Light" 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"}', + "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, + "image_url" : "http://i.asdf.us/im/be/PinkHijab_1425078647_reye.gif", + } + def __init__(self, pattern_url=None, pattern_data=None, username=None, @@ -27,28 +27,17 @@ class PbPattern(Pb): ): 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("image_url", image_url, value_type="img_url"); + self.params.set_val("pattern_url", pattern_url, value_type="img_url"); + self.params.set_val("pattern_data", pattern_data, 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 - #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.filename, self.filepath = self._filename_filepath_create(url=self.params.image_url['url'], extension=self.params.image_url['mimetype']) + _pattern_filename, self._pattern_filepath = self._filename_filepath_create(namepart="pattern") - self._download(self.params.image_url, self._downloaded_file) - - self.filename = "{}.{}".format(self.basename, self._format) - self.filepath = os.path.join(WORKING_DIR, self.filename) - - if self.params['pattern_url']: - self._download(self.params['pattern_url'], self._pattern_file) - elif self.params['pattern_data']: - self._from_pattern_data() - else: - sys.stderr.write("pattern must be supplied as json array or as a png url") - raise ValueError; + if self.params.pattern_data: self._from_pattern_data() + elif not self.params.pattern_url: + self.err_warn("pattern must be supplied as json array or as a png url") def _from_pattern_data(self): def boolToColor(boolean): @@ -66,29 +55,29 @@ class PbPattern(Pb): for j in range(0, len(specs['matrix'][i])): pixels[j,i] = boolToColor(int(specs['matrix'][i][j])); - img.save(self._pattern_file, "PNG") + img.save(self._pattern_filepath, "PNG") #first step def _make_canvas(self): - _width, _height = self.dimensions(self._downloaded_file) # same here + _width, _height = self.dimensions(self.params.image_url['path']) # 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 def _make_mask(self): #tile the pattern pattern on the canvas - cmd = [BIN_COMPOSITE,"-tile", self._pattern_file, self.filepath, self.filepath]; + cmd = [BIN_COMPOSITE,"-tile", self._pattern_filepath, self.filepath, self.filepath]; self._call_cmd(cmd) #fuse the tiled file to create a mask #convert thebg.gif -compose Dst_In null: thefile.gif -matte -layers composite new.gif cmd = [BIN_CONVERT, self.filepath, "-compose", "Dst_In", "null:", - self._downloaded_file, "-matte", "-layers", "composite", self.filepath] + self.params.image_url['path'], "-matte", "-layers", "composite", self.filepath] self._call_cmd(cmd) #third step def _fuse_mask(self, fuse_mode=_fuse_mode): cmd = [BIN_CONVERT, "-dispose", "2", self.filepath, "null:", - self._downloaded_file, "-matte", "-compose", fuse_mode, "-layers", "composite", + self.params.image_url['path'], "-matte", "-compose", fuse_mode, "-layers", "composite", self.filepath] self._call_cmd(cmd) |
