idiotbaka

使用PHP绘制彩色的控制台文本,以及进度条
几天前看到个 python 的库,名字叫 Rich,可以在控制台中打印出丰富的文本、进度条,甚至可以代码高亮和显示...
扫描右侧二维码阅读全文
02
2020/12

使用PHP绘制彩色的控制台文本,以及进度条

screen.png
几天前看到个 python 的库,名字叫 Rich,可以在控制台中打印出丰富的文本、进度条,甚至可以代码高亮和显示markdown,过于强大:https://github.com/willmcgugan/rich
在PHP里没有找到成熟的同类型框架,于是自己动手,写了个简单的类,可以实现在控制台绘制文字样式,以及进度条。


快速使用

Github地址:https://github.com/idiotbaka/php-console-color
只需要引入一个文件即可使用。

打印出红色的控制台文字:

echo kalor::text('hello, world', kalor::RED);

打印出黄色的控制台文字,并换一行(第三个参数为true):

echo kalor::text('hello, world', kalor::YELLOW, true);

打印出白色的控制台文字,背景色为深绿色,带有下划线(多种样式时,第二个参数是数组),并换一行:

echo kalor::text('hello, world', [kalor::WHITE, kalor::BG_DARKGREEN, kalor::_UNDERLINE], true);

1.png

支持的颜色

颜色文字值背景值
BLACKBG_BLACK
REDBG_RED
绿GREENBG_GREEN
YELLOWBG_YELLOW
BLUEBG_BLUE
PURPLEBG_PURPLE
深绿DARKGREENBG_DARKGREEN
WHITEBG_WHITE

支持的样式

样式名
高亮(部分环境中为加粗)_LIGHT
弱化_DIM
斜体_ITALIC
下划线_UNDERLINE
闪烁_TWINKLE
快速闪烁_TWINKLE_QUICK
反色_INVERSE
隐藏_HIDE
删除线_STRIKETHROUGH

注意,不是所有的控制台都支持以上样式。具体哪些支持,需要自己尝试。

进度条

简单的百分比进度条,进度条label显示 download... :

// 百分比进度,支持两位小数,范围0~100
$progress = 0;
while($progress < 100) {
    $progress += 10;
    // 如果进度为100时,会自动换一行
    echo kalor::progressBarPercent('download...', $progress);
    sleep(1);
}

2.gif

在进度条的后方显示信息,例如下载速度:

echo kalor::progressBarPercent(['download...', rand(100, 999).'kb/s'], $progress);

3.gif

自定义进度条字符长度,传入第三个参数(默认50):

echo kalor::progressBarPercent(['download...', rand(100, 999).'kb/s'], $progress, 10);

4.gif

自定义进度条字符,传入第四个参数(数组,分别是进度完成部分和未完成部分):

echo kalor::progressBarPercent(['download...', rand(100, 999).'kb/s'], $progress, 50, ['>', '_']);

5.gif

步骤进度条,后方显示的不是百分比而是步骤进度(第二个参数为数组,分别是当前进度和总进度):

$progress = 0;
while($progress < 5) {
    $progress ++;
    // 传入的当前进度和总进度需要是正整数
    // 如果当前进度等于总进度时,会自动换一行
    echo kalor::progressBarStep('download file '.$progress.'...', [$progress, 5]);
    sleep(1);
}

6.gif

Last modification:December 2nd, 2020 at 10:20 am
本文采用 知识共享署名 4.0 国际许可协议进行许可
可自由转载、引用,但需署名作者且注明文章出处
If you think my article is useful to you, please feel free to appreciate

Leave a Comment