def __init__(self, fp): self.fp = fp self.queue = [] if not Image.has_feature("crc32"): self.crc = self.crc_skip
def load(self): "Load image data based on tile list" pixel = Image.Image.load(self) if self.tile is None: raise IOError("cannot load this image") if not self.tile: return pixel self.map = None readonly = 0 if self.filename and len(self.tile) == 1: # try memory mapping d, e, o, a = self.tile[0] if d == "raw" and a[0] == self.mode and a[0] in Image._MAPMODES: try: if Image.has_feature("map"): # use built-in mapper self.map = Image.core.map(self.filename) self.map.seek(o) self.im = self.map.readimage(self.mode, self.size, a[1], a[2]) else: # use mmap, if possible import mmap file = open(self.filename, "r+") size = os.path.getsize(self.filename) # FIXME: on Unix, use PROT_READ etc self.map = mmap.mmap(file.fileno(), size) self.im = Image.core.map_buffer( self.map, self.size, d, e, o, a) readonly = 1 except (AttributeError, EnvironmentError, ImportError): self.map = None self.load_prepare() # look for read/seek overrides try: read = self.load_read except AttributeError: read = self.fp.read try: seek = self.load_seek except AttributeError: seek = self.fp.seek if not self.map: sort_tiles(self.tile) try: # FIXME: This is a hack to handle TIFF's JpegTables tag. prefix = self.tile_prefix except AttributeError: prefix = "" for d, e, o, a in self.tile: d = Image._getdecoder(self.mode, d, a, self.decoderconfig) seek(o) try: d.setimage(self.im, e) except ValueError: continue b = prefix t = len(b) while True: s = read(self.decodermaxblock) if isinstance(s, ImageSupport.ByteArray): s = s.tostring() if not s: self.tile = [] raise IOError( "image file is truncated (%d bytes not processed)" % len(b)) b = b + s n, e = d.decode(b) if n < 0: break b = b[n:] t = t + n self.tile = [] self.readonly = readonly self.fp = None # might be shared if not self.map and e < 0: raise_ioerror(e) # post processing if hasattr(self, "tile_post_rotate"): # FIXME: This is a hack to handle rotated PCD's self.im = self.im.rotate(self.tile_post_rotate) self.size = self.im.size self.load_end() return Image.Image.load(self)
def load(self): "Load image data based on tile list" pixel = Image.Image.load(self) if self.tile is None: raise IOError("cannot load this image") if not self.tile: return pixel self.map = None readonly = 0 if self.filename and len(self.tile) == 1: # try memory mapping d, e, o, a = self.tile[0] if d == "raw" and a[0] == self.mode and a[0] in Image._MAPMODES: try: if Image.has_feature("map"): # use built-in mapper self.map = Image.core.map(self.filename) self.map.seek(o) self.im = self.map.readimage( self.mode, self.size, a[1], a[2] ) else: # use mmap, if possible import mmap file = open(self.filename, "r+") size = os.path.getsize(self.filename) # FIXME: on Unix, use PROT_READ etc self.map = mmap.mmap(file.fileno(), size) self.im = Image.core.map_buffer( self.map, self.size, d, e, o, a ) readonly = 1 except (AttributeError, EnvironmentError, ImportError): self.map = None self.load_prepare() # look for read/seek overrides try: read = self.load_read except AttributeError: read = self.fp.read try: seek = self.load_seek except AttributeError: seek = self.fp.seek if not self.map: sort_tiles(self.tile) try: # FIXME: This is a hack to handle TIFF's JpegTables tag. prefix = self.tile_prefix except AttributeError: prefix = "" for d, e, o, a in self.tile: d = Image._getdecoder(self.mode, d, a, self.decoderconfig) seek(o) try: d.setimage(self.im, e) except ValueError: continue b = prefix t = len(b) while True: s = read(self.decodermaxblock) if isinstance(s, ImageSupport.ByteArray): s = s.tostring() if not s: self.tile = [] raise IOError("image file is truncated (%d bytes not processed)" % len(b)) b = b + s n, e = d.decode(b) if n < 0: break b = b[n:] t = t + n self.tile = [] self.readonly = readonly self.fp = None # might be shared if not self.map and e < 0: raise_ioerror(e) # post processing if hasattr(self, "tile_post_rotate"): # FIXME: This is a hack to handle rotated PCD's self.im = self.im.rotate(self.tile_post_rotate) self.size = self.im.size self.load_end() return Image.Image.load(self)
import Image import ImageFile _handler = None ## # Install application-specific WMF image handler. # # @param handler Handler object. def register_handler(handler): global _handler _handler = handler if Image.has_feature("drawwmf"): # install default handler (windows only) class WmfHandler(object): def open(self, im): im.mode = "RGB" self.bbox = im.info["wmf_bbox"] def load(self, im): im.fp.seek(0) # rewind return Image.fromstring( "RGB", im.size, Image.core.drawwmf(im.fp.read(), im.size, self.bbox), "raw", "BGR", (im.size[0]*3 + 3) & -4, -1 )
import ImageFile _handler = None ## # Install application-specific WMF image handler. # # @param handler Handler object. def register_handler(handler): global _handler _handler = handler if Image.has_feature("drawwmf"): # install default handler (windows only) class WmfHandler(object): def open(self, im): im.mode = "RGB" self.bbox = im.info["wmf_bbox"] def load(self, im): im.fp.seek(0) # rewind return Image.fromstring( "RGB", im.size, Image.core.drawwmf(im.fp.read(), im.size, self.bbox), "raw", "BGR", (im.size[0] * 3 + 3) & -4, -1) register_handler(WmfHandler())