def tile_decoder(**kwargs): """Fixture called with various configurations by many tests. Reads a tile. That's all it does. """ stream = openjp2.stream_create_default_file_stream(kwargs['filename'], True) dparam = openjp2.set_default_decoder_parameters() dparam.decod_format = kwargs['codec_format'] # Do not use layer decoding limitation. dparam.cp_layer = 0 # do not use resolution reductions. dparam.cp_reduce = 0 codec = openjp2.create_decompress(kwargs['codec_format']) openjp2.set_info_handler(codec, None) openjp2.set_warning_handler(codec, None) openjp2.set_error_handler(codec, None) openjp2.setup_decoder(codec, dparam) image = openjp2.read_header(stream, codec) openjp2.set_decode_area(codec, image, kwargs['x0'], kwargs['y0'], kwargs['x1'], kwargs['y1']) data = np.zeros((1150, 2048, 3), dtype=np.uint8) while True: rargs = openjp2.read_tile_header(codec, stream) tidx = rargs[0] size = rargs[1] go_on = rargs[-1] if not go_on: break openjp2.decode_tile_data(codec, tidx, data, size, stream) openjp2.end_decompress(codec, stream) openjp2.destroy_codec(codec) openjp2.stream_destroy(stream) openjp2.image_destroy(image)
def tile_encoder(**kwargs): """Fixture used by many tests.""" num_tiles = ((kwargs['image_width'] / kwargs['tile_width']) * (kwargs['image_height'] / kwargs['tile_height'])) tile_size = ((kwargs['tile_width'] * kwargs['tile_height']) * (kwargs['num_comps'] * kwargs['comp_prec'] / 8)) data = np.random.random((kwargs['tile_height'], kwargs['tile_width'], kwargs['num_comps'])) data = (data * 255).astype(np.uint8) l_param = openjp2.set_default_encoder_parameters() l_param.tcp_numlayers = 1 l_param.cp_fixed_quality = 1 l_param.tcp_distoratio[0] = 20 # position of the tile grid aligned with the image l_param.cp_tx0 = 0 l_param.cp_ty0 = 0 # tile size, we are using tile based encoding l_param.tile_size_on = 1 l_param.cp_tdx = kwargs['tile_width'] l_param.cp_tdy = kwargs['tile_height'] # use irreversible encoding l_param.irreversible = kwargs['irreversible'] l_param.numresolution = 6 l_param.prog_order = glymur.core.LRCP l_params = (openjp2.ImageComptParmType * kwargs['num_comps'])() for j in range(kwargs['num_comps']): l_params[j].dx = 1 l_params[j].dy = 1 l_params[j].h = kwargs['image_height'] l_params[j].w = kwargs['image_width'] l_params[j].sgnd = 0 l_params[j].prec = kwargs['comp_prec'] l_params[j].x0 = 0 l_params[j].y0 = 0 codec = openjp2.create_compress(kwargs['codec']) openjp2.set_info_handler(codec, None) openjp2.set_warning_handler(codec, None) openjp2.set_error_handler(codec, None) cspace = openjp2.CLRSPC_SRGB l_image = openjp2.image_tile_create(l_params, cspace) l_image.contents.x0 = 0 l_image.contents.y0 = 0 l_image.contents.x1 = kwargs['image_width'] l_image.contents.y1 = kwargs['image_height'] l_image.contents.color_space = openjp2.CLRSPC_SRGB openjp2.setup_encoder(codec, l_param, l_image) stream = openjp2.stream_create_default_file_stream(kwargs['filename'], False) openjp2.start_compress(codec, l_image, stream) for j in np.arange(num_tiles): openjp2.write_tile(codec, j, data, tile_size, stream) openjp2.end_compress(codec, stream) openjp2.stream_destroy(stream) openjp2.destroy_codec(codec) openjp2.image_destroy(l_image)
def tile_encoder(**kwargs): """Fixture used by many tests.""" num_tiles = ((kwargs['image_width'] / kwargs['tile_width']) * (kwargs['image_height'] / kwargs['tile_height'])) tile_size = ((kwargs['tile_width'] * kwargs['tile_height']) * (kwargs['num_comps'] * kwargs['comp_prec'] / 8)) data = np.random.random( (kwargs['tile_height'], kwargs['tile_width'], kwargs['num_comps'])) data = (data * 255).astype(np.uint8) l_param = openjp2.set_default_encoder_parameters() l_param.tcp_numlayers = 1 l_param.cp_fixed_quality = 1 l_param.tcp_distoratio[0] = 20 # position of the tile grid aligned with the image l_param.cp_tx0 = 0 l_param.cp_ty0 = 0 # tile size, we are using tile based encoding l_param.tile_size_on = 1 l_param.cp_tdx = kwargs['tile_width'] l_param.cp_tdy = kwargs['tile_height'] # use irreversible encoding l_param.irreversible = kwargs['irreversible'] l_param.numresolution = 6 l_param.prog_order = glymur.core.LRCP l_params = (openjp2.ImageComptParmType * kwargs['num_comps'])() for j in range(kwargs['num_comps']): l_params[j].dx = 1 l_params[j].dy = 1 l_params[j].h = kwargs['image_height'] l_params[j].w = kwargs['image_width'] l_params[j].sgnd = 0 l_params[j].prec = kwargs['comp_prec'] l_params[j].x0 = 0 l_params[j].y0 = 0 codec = openjp2.create_compress(kwargs['codec']) openjp2.set_info_handler(codec, None) openjp2.set_warning_handler(codec, None) openjp2.set_error_handler(codec, None) cspace = openjp2.CLRSPC_SRGB l_image = openjp2.image_tile_create(l_params, cspace) l_image.contents.x0 = 0 l_image.contents.y0 = 0 l_image.contents.x1 = kwargs['image_width'] l_image.contents.y1 = kwargs['image_height'] l_image.contents.color_space = openjp2.CLRSPC_SRGB openjp2.setup_encoder(codec, l_param, l_image) stream = openjp2.stream_create_default_file_stream(kwargs['filename'], False) openjp2.start_compress(codec, l_image, stream) for j in np.arange(num_tiles): openjp2.write_tile(codec, j, data, tile_size, stream) openjp2.end_compress(codec, stream) openjp2.stream_destroy(stream) openjp2.destroy_codec(codec) openjp2.image_destroy(l_image)