注意 - 我不确定这是一个lib问题还是我的代码有问题 - 请就此提出建议
我使用this lib创建了一个参数化的PHP页面,以便我们可以从url中的params生成QR代码:
include( '/qrlib/qrlib.php' );
if (isset($_GET['fg'])&&!empty($_GET['fg'])) {
$fore_color = $_GET['fg'];
} else {
$fore_color = 0x000000;
}
if (isset($_GET['bg'])&&!empty($_GET['bg'])) {
$back_color = $_GET['bg'];
} else {
$back_color = 0xFFFFFF;
}
QRcode::png($_GET['url'], false, $_GET['err'], $_GET['size'], $_GET['pixel'], false, $back_color, $fore_color);
这适用于url
,err
,size
和pixel
,但只要我尝试设置网址的颜色 - 相应的颜色变化(fg)或者bg)只是默认为黑色。
但是,如果显式设置变量$fore_color
或$back_color
(不是通过URL并使用else
语句,那么它们就可以工作。(我应该注意,如果你看一下如果没有设置参数,他们将默认为黑色FG和白色BG。
我已经回显了$fore_color
和$back_color
以检查值是否正确传递并且它们正如预期的那样显示 - 当一个或两个颜色参数都是填充在URL中。
我在这里设置了几个例子:
http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&bg=0xFFFFFF&fg=0x000000
http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&bg=0xFFFFFF
http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&fg=0x000000
http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L
有关这种奇怪行为的任何建议请指教。 (使用PHP-FPM 5.3.10在NginX 1.3.8上运行的服务器)
答案 0 :(得分:2)
您需要以十进制传递参数,而不是十六进制。
因此,例如,对于浅灰色BG和绿色FG: http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&bg=15724527&fg=2068254
在你的代码中,你得到的参数是Integer,而不是Hexadecimal。
因此,这是无效的: 0x20921F 这是有效的: 2134559
或者您需要添加PHP代码以将Hex转换为Dec。 您可以使用http://php.net/manual/en/function.hexdec.php
答案 1 :(得分:0)
我注意到你使用的lib接受了int,你从$ _GET得到的值是一个字符串,试试:
if (isset($_GET['fg'])&&!empty($_GET['fg'])) {
$fore_color = settype($_GET['fg'], "integer");
} else {
$fore_color = 0x000000;
}
if (isset($_GET['bg'])&&!empty($_GET['bg'])) {
$back_color = settype($_GET['bg'], "integer");
} else {
$back_color = 0xFFFFFF;
}