def chunk_AFRM(self, offset, bytes): "AFRM -- next frame follows" # assertions if self.count != 0: raise SyntaxError("misplaced AFRM chunk") self.show = 1 self.id = 0 self.count = 1 self.repair = None s = self.fp.read(bytes) if len(s) >= 2: self.id = i16(s) if len(s) >= 4: self.count = i16(s[2:4]) if len(s) >= 6: self.repair = i16(s[4:6]) else: self.repair = None if Image.DEBUG: print("AFRM", self.id, self.count) return s
def chunk_ADEF(self, offset, bytes): "ADEF -- store image" # assertions if self.count != 0: raise SyntaxError("misplaced ADEF chunk") self.show = 0 self.id = 0 self.count = 1 self.repair = None s = self.fp.read(bytes) if len(s) >= 2: self.id = i16(s) if len(s) >= 4: self.count = i16(s[2:4]) if Image.DEBUG: print("ADEF", self.id, self.count) return s
def chunk_PAST(self, offset, bytes): "PAST -- paste one image into another" # assertions if self.count == 0: raise SyntaxError("misplaced PAST chunk") if self.repair is not None: # we must repair the target image before we # start pasting # brute force; a better solution would be to # update only the dirty rectangles in images[id]. # note that if images[id] doesn't exist, it must # be created self.images[self.id] = self.images[self.repair].copy() self.repair = None s = self.fp.read(bytes) im = self.images[i16(s)] x, y = i32(s[2:6]), i32(s[6:10]) bbox = x, y, im.size[0]+x, im.size[1]+y if im.mode in ["RGBA"]: # paste with transparency # FIXME: should handle P+transparency as well self.images[self.id].paste(im, bbox, im) else: # paste without transparency self.images[self.id].paste(im, bbox) self.action = ("PAST",) self.__store() return s