首先PHP已经有现成的QrCode类库phpqrcode,可以将一个字符串转成PNG格式的图片,但是PNG图片是没法在终端里展示的,于是仔细翻看文档和demo,发现该类库也可以输出0和1组成的矩阵(实际上该方法返回的是一个PHP的二维数组)。
已经有了0和1的矩阵,接下来要做的就是输出黑白色块,为了 *** 作方便,我引入了symfony项目中的console组件。通过console组件可以非常方便的创建一个Cli命令,而且内置了大量输入和输出方法。
根据console的文档,我们可以新建两个OutputFormatStyle:
1$black = new OutputFormatterStyle('black', 'black')
2$output->getFormatter()->setStyle('blackc', $black)
3$white = new OutputFormatterStyle('white', 'white')
4$output->getFormatter()->setStyle('whitec', $white)
定义了文字颜色和背景颜色分别是白色和黑色的两个样式。
这样就可以输出白色和黑色的色块了:
1$output->writeln('<whitec> </whitec><blackc> </blackc><whitec> </whitec>')
上面的代码就会输出两个白色块中间隔着一个黑色块。
黑白色块输出搞定之后,只需要根据二维码的0-1矩阵输出对应色块就行。
所以核心代码如下:
01protected function execute(InputInterface $input, OutputInterface $output)
02{
03$lrPadding = 1
04$udPadding = 1
05$text = 'http://leo108.com'
06$map = array(
070 =>'<whitec> </whitec>',
081 =>'<blackc> </blackc>',
09)
10$this->initStyle($output)
11$text = QRcode::text($text)
12$length = strlen($text[0])
13
14$paddingLine = str_repeat($map[0], $length + $lrPadding * 2) . "\n"
15$after = $before = str_repeat($paddingLine, $udPadding)
16$output->write($before)
17foreach ($text as $line) {
18$output->write(str_repeat($map[0], $lrPadding))
19for ($i = 0$i <$length$i++) {
20$type = substr($line, $i, 1)
21$output->write($map[$type])
22}
23$output->writeln(str_repeat($map[0], $lrPadding))
24}
25$output->write($after)
26}
其中$lrPadding和$udPadding分别用来配置左右和上下白边的长度。
最终代码已托管github
可以通过第三方软件来制作。二维码又称二维条码,最常见的形式是QRCode,QR全称QuickResponse,是一个近几年来移动设备上超流行的一种编码方式。
它比传统的BarCode条形码能存更多的信息,也能表示更多的数据类型。
二维条码/二维码(2-dimensionalbarcode)用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。
在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。
它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。
同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)