def get(self, tiles): for metatile in tiles: metaimage = None if metatile.data is None else Image.open( StringIO(metatile.data)) for tilecoord in metatile.tilecoord: if metatile.error: tile = Tile(tilecoord) tile.metadata = metatile.metadata tile.error = metatile.error yield tile continue if metatile.data is None: tile = Tile(tilecoord) tile.metadata = metatile.metadata tile.error = "Metatile data is None" yield tile continue x = self.border + (tilecoord.x - metatile.tilecoord.x) * self.tile_size y = self.border + (tilecoord.y - metatile.tilecoord.y) * self.tile_size image = metaimage.crop( (x, y, x + self.tile_size, y + self.tile_size)) string_io = StringIO() image.save(string_io, FORMAT_BY_CONTENT_TYPE[self.format]) yield Tile(tilecoord, data=string_io.getvalue(), content_type=self.format, **metatile.metadata)