Esempio n. 1
0
    def dump_to_file(self, tiled_map, file_path):
        """ 将tiled_map保存在给定的文件中 """

        tiled_map_stream = StringIO()
        self.dump_to_stream(tiled_map, tiled_map_stream)

        tiled_map_stream.seek(0)
        compressed_bin = zlib.compress(tiled_map_stream.read())
        with open(file_path, 'wb') as f:
            f.write(compressed_bin)
Esempio n. 2
0
 def get_png(self, fobj):
     output = StringIO()
     if isinstance(fobj, basestring):
         path = fobj
         if not path.startswith('/'):
             path = os.path.join(settings.MEDIA_ROOT, path)
         fobj = open(fobj)
     img = Image.open(fobj)
     img.save(output, format="PNG")
     output.seek(0)
     return output
Esempio n. 3
0
    def read_from_file(self, file_path):
        """ 读取并解析map文件 """

        with open(file_path, 'rb') as f:
            compressed_bin = f.read()

        raw_binary = zlib.decompress(compressed_bin)
        tiled_map_stream = StringIO(raw_binary)

        tiled_map = TiledMap()

        # 读取Header部分
        header_stream = StringIO(tiled_map_stream.read(104))
        header_fields = self.parse_fields(
            header_stream, self.header_fields_desc)
        tiled_map.update_fields(**header_fields)

        # 读取tiles部分
        tiles = []
        tile_length = tiled_map.tile_row * tiled_map.tile_col
        tile_stream = StringIO(tiled_map_stream.read(tile_length))

        for i in xrange(0, tiled_map.tile_row * tiled_map.tile_col):
            tile_byte = struct.unpack('b', tile_stream.read(1))[0]
            tile = MapTile.from_byte(tile_byte)
            tiles.append(tile)

        tiled_map.tiles = tiles

        # 读取elements部分
        for i in xrange(0, tiled_map.element_num):
            element = MapElement()
            element_header_stream = StringIO(tiled_map_stream.read(20))
            element_fields = self.parse_fields(
                element_header_stream,
                self.element_header_fields_desc)

            element.update_fields(**element_fields)
            if element.data_length > 0:
                element.data = tiled_map_stream.read(element.data_length)
            else:
                element.data = ''

            tiled_map.elements.append(element)

        # 读取jump elements部分
        for i in xrange(0, tiled_map.jump_point_num):
            jump_point = MapJumpPoint()
            jump_point_header_stream = StringIO(tiled_map_stream.read(48))

            jump_point_fields = self.parse_fields(
                jump_point_header_stream,
                self.jump_point_header_fields_desc)

            jump_point.update_fields(**jump_point_fields)
            if jump_point.data_length > 0:
                jump_point.data = tiled_map_stream.read(jump_point.data_length)

            tiled_map.jump_points.append(jump_point)

        return tiled_map