Changeset 9033:5efbd12a1e0d in orange


Ignore:
Timestamp:
09/27/11 17:01:18 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
626af45f35d40b743f920ea813bfa0062b0df02b
Message:

Renderes can now save the image to a file like object.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/Orange/misc/render.py

    r8053 r9033  
    110110        return self.get_rgb(val, gamma) 
    111111     
     112def as_open_file(file, mode="rb"): 
     113    if isinstance(file, basestring): 
     114        file = open(file, mode) 
     115    else: # assuming it is file like with proper mode, could check for write, read 
     116        pass 
     117    return file 
    112118 
    113119class Renderer(object): 
     
    211217     
    212218    def draw_line(self, sx, sy, ex, ey, **kwargs): 
    213         raise NotImplemented 
     219        raise NotImplementedError 
    214220     
    215221    def draw_lines(self, points, **kwargs): 
    216         raise NotImplemented 
     222        raise NotImplementedError 
    217223     
    218224    def draw_rect(self, x, y, w, h, **kwargs): 
    219         raise NotImplemented 
     225        raise NotImplementedError 
    220226     
    221227    def draw_polygon(self, vertices, **kwargs): 
    222         raise NotImplemented 
     228        raise NotImplementedError 
    223229 
    224230    def draw_arch(self, something, **kwargs): 
    225         raise NotImplemented 
     231        raise NotImplementedError 
    226232     
    227233    def draw_text(self, x, y, text, **kwargs): 
    228         raise NotImplemented 
     234        raise NotImplementedError 
    229235     
    230236    def string_size_hint(self, text, **kwargs): 
     
    244250            self.restore_render_state() 
    245251             
    246     def save(self): 
    247         raise NotImplemented 
     252    def save(self, file): 
     253        raise NotImplementedError 
    248254     
    249255    def close(self, file): 
     
    396402        self._eps.write("%f %f skew\n" % (sx, sy)) 
    397403         
    398     def save(self, filename): 
    399 #        self._eps.close() 
    400         open(filename, "wb").write(self._eps.getvalue()) 
     404    def save(self, file): 
     405        file = as_open_file(file, "wb") 
     406        file.write(self._eps.getvalue()) 
    401407         
    402408    def string_size_hint(self, text, **kwargs): 
     
    457463                        fill=_int_color(self.stroke_color())) 
    458464         
    459     def save(self, file): 
    460         self._pil_image.save(file) 
     465    def save(self, file, format=None): 
     466        if isinstance(file, basestring): 
     467            self._pil_image.save(file) 
     468        else: 
     469            file = as_open_file(file, "wb") 
     470            self._pil_image.save(file, format) 
    461471         
    462472    def string_size_hint(self, text, **kwargs): 
     
    560570        self._svg.write('</g>\n' * count) 
    561571         
    562     def save(self, filename): 
    563         open(filename, "wb").write(self.SVG_HEADER % (self.height, self.width, self._defs.getvalue(), self._svg.getvalue())) 
     572    def save(self, file): 
     573        file = as_open_file(file, "wb") 
     574        file.write(self.SVG_HEADER % (self.height, self.width, self._defs.getvalue(), self._svg.getvalue())) 
    564575         
    565576class CairoRenderer(Renderer): 
Note: See TracChangeset for help on using the changeset viewer.