Ticket #214: lazy-reader.diff

File lazy-reader.diff, 1.5 KB (added by ralf, 18 months ago)

use lazy loading for images

  • mwlib/reportlab/lib/utils.py

    diff --git a/mwlib/reportlab/lib/utils.py b/mwlib/reportlab/lib/utils.py
    a b  
    526526    except ImportError: 
    527527        return 0 
    528528 
    529 class ImageReader: 
     529class ImageReader(object): 
    530530    "Wraps up either PIL or Java to get data from bitmaps" 
    531531    def __init__(self, fileName): 
    532532        if isinstance(fileName,ImageReader): 
     
    559559                else: 
    560560                    import PIL.Image 
    561561                    self._image = PIL.Image.open(self.fp) 
    562                     if self._image=='JPEG': self.jpeg_fh = self._jpeg_fp 
     562                    self.getSize() 
     563 
     564                    use_jpeg_fp = self._image=='JPEG' 
     565                    del self._image 
     566                    del self.fp 
     567                    self.__class__=LazyImageReader 
     568                     
     569                    if use_jpeg_fp: 
     570                        self.jpeg_fh = self._jpeg_fp 
    563571            except: 
    564572                et,ev,tb = sys.exc_info() 
    565573                if hasattr(ev,'args'): 
     
    641649                return map(ord, palette[transparency:transparency+3]) 
    642650            else: 
    643651                return None 
     652 
     653class LazyImageReader(ImageReader): 
     654    @property 
     655    def fp(self): 
     656        return open_for_read(self.fileName, 'b') 
     657         
     658    @property 
     659    def _image(self):         
     660        import PIL.Image 
     661        return PIL.Image.open(self.fp) 
    644662 
    645663def getImageData(imageFileName): 
    646664    "Get width, height and RGB pixels from image file.  Wraps Java/PIL"