可以这么调用
<?php
include "qrlib.php"
$errorCorrectionLevel = 'L'
if (isset($_REQUEST['level']) &&in_array($_REQUEST['level'], array('L','M','Q','H')))
$errorCorrectionLevel = $_REQUEST['level']
$matrixPointSize = 4
if (isset($_REQUEST['size']))
$matrixPointSize = min(max((int)$_REQUEST['size'], 1), 10)
if (isset($_REQUEST['data'])) {
if (trim($_REQUEST['data']) == '') die()
$url = $_REQUEST['data']
QRcode::png($url, false, $errorCorrectionLevel, $matrixPointSize)
} else {
die()
}
效果和详细可以参考下
http://www.tocus.com.cn/?send=article_show&id=178&class=2
希望对你有帮助
需求很简单,就是在linux的终端中输入一个字符串(可以是以命令行参数形式,也可以是通过交互式输入),然后就会输出对应的二维码。首先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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)