コード例 #1
0
def reduce_colours(img_rgb, final_colours):

    if not isinstance(img_rgb, np.ndarray):
        img_rgb = np.asarray(img_rgb) / 255

    final_img = img_rgb.copy()

    # TODO: check if the RGB2LAB conversion MUST occurs at the very last
    # or if the problems I had were because of code problem uh

    pb = ProgressBar('Reducing colours')

    for i in range(final_img.shape[0]):
        for j in range(final_img.shape[1]):
            c1 = color.rgb2lab([[final_img[i, j]]])[0][0]
            c2 = [color.rgb2lab([[x]])[0][0] for x in final_colours]
            distances = [dst(c1, x) for x in c2]
            final_img[i, j] = final_colours[distances.index(min(distances))]

            pb.set_value(
                floor((((i * final_img.shape[1]) + j) /
                       (final_img.shape[0] * final_img.shape[1])) * 100))
            QApplication.processEvents()

    pb.close()

    return final_img
コード例 #2
0
ファイル: bxplorer_data.py プロジェクト: yangbochang/Bxplorer
    def append_root(self, root):
        ''' 添加一个root '''

        data = self.read()

        # 如果目录已存在,或是现有Root集的子路径,跳出;否则添加目录
        for _root in data['Root']:
            if _root == root or _root in root:
                return
        data['Root'].append(root)

        # 初始化一个进度条
        progress_bar = ProgressBar('Code Files')

        # 添加目录下的所有文件
        file_reader = FileReader()
        file_list = file_reader.walk_folder(root)
        total_number = len(file_list)
        for index, file in enumerate(file_list):

            # 获取文件基本信息
            ## 获取文件标识码
            file_code = file_reader.code_file(file)
            ## 获取文件名和文件扩展名
            file_basename = os.path.basename(file)
            file_name, file_extension = os.path.splitext(file_basename)
            ## 获取文件大小
            file_size_num = (int)(file_code.split('-')[-1])
            file_size_num = round(file_size_num / 1024 / 1024)
            file_size = str(file_size_num) + ' MB' if file_size_num < 1024 \
                else str(round(file_size_num / 1024, 2)) + ' GB'

            # 如果在已有数据中找不到文件,进行添加
            if file not in data['File']:
                data['File'][file] = {
                    'code': file_code,
                    'extension': file_extension,
                    'name': file_name,
                    'path': file,
                    'size': file_size,
                }

            # 进度条即时显示
            progress_bar.set_value(index + 1, total_number)
            QApplication.processEvents()

        # 循环结束,关闭进度条
        progress_bar.close()
        # 回填更新后的数据
        self.write(data)
コード例 #3
0
class ProgressBarController(object):
    """управление полоской прогресса"""
    __slots__ = ('_width', '_term_width', '_progress_bar', '_oldsignal')

    def __init__(self, min, max, width=0, value=None):
        self._width = None
        self._term_width = None
        self._oldsignal = None
        self._progress_bar = ProgressBar(min, max, min)
        if value is not None:
            self._progress_bar.set_value(value)
        # ширина в ноль означает, что полоска должна растянуться на все окно
        # при изменении размера окна полоска подстаивается под новый размер
        self.set_width(width)

    def update_term_width(self):
        # узнать ширину окна
        self._term_width = get_term_width()
        # self._term_height = int(rd[0])

    def sigwinch_handler(self, sig, frame):
        if self._width == 0:
            self.set_width(0)
        else:
            pass
        if hasattr(self._oldsignal, '__call__'):
            self._oldsignal(sig, frame)

    def redraw(self):
        import sys
        s = str(self._progress_bar)
        l = len(s)
        sys.stdout.write(s + ESC + str(l) + "D")
        sys.stdout.flush()

    def set_value(self, value, animated=False):
        import sys
        if not animated:
            self._set_value(value)
            sys.stdout.write(str(self._progress_bar))
        else:
            from animation_controller import \
                AnimationController, AnimationTimingQuad
            start_value = self.value()
            delta = value - start_value

            def step_hook(progress):
                self._set_value(start_value + (delta * progress))
                self.redraw()

            def complete_hook():
                self._set_value(value)
                self.redraw()
                sys.stdout.write(ESC + str(len(str(self._progress_bar))) + "C")

            anim = AnimationController(step=step_hook,
                                       timing=AnimationTimingQuad,
                                       complete=complete_hook)
            anim.begin()

    def _set_value(self, value):
        self._progress_bar.set_value(value)

    def value(self):
        return self._progress_bar.value()

    def set_width(self, width):
        self.update_term_width()
        if width < 0:
            raise ValueError('set_width: width must be >= 0')
        elif width == 0 or width >= self._term_width - 1:
            self._width = 0
            self._progress_bar.set_width(self._term_width - 1)
            self._oldsignal = \
                signal.signal(signal.SIGWINCH, self.sigwinch_handler)
        else:
            self._width = width
            self._progress_bar.set_width(width)
            sig = self._oldsignal if self._oldsignal else signal.SIG_DFL
            signal.signal(signal.SIGWINCH, sig)
            self._oldsignal = None

    def width(self):
        if self._width == 0:
            return self._term_width - 1
        else:
            return self._width

    def progress_bar(self):
        return self._progress_bar

    def set_progress_bar(self, pb):
        self._progress_bar = pb
        pb.set_width(self._width)

    def __str__(self):
        return str(self._progress_bar)

    def __repr__(self):
        pb = self._progress_bar
        return 'ProgressBarController(min=%f, max=%f, width=%d, value=%f)' %\
            (pb.min(), pb.max(), pb.width(), pb.value())