5

我有一个非常简单的函数可以从谷歌图表 API 生成二维码。

 function o99_qr_code($size,$type,$url ) {

        $qr = '';
        $dsize = $size .'x'.$size; // doubleSize

         $qr = '<img src="http://chart.apis.google.com/chart?cht=qr&chs=' . $dsize . '&chld=L|0&chl=' . $url . '" width="' .$size .'" height="'.$size .'" alt="QR code" title="QR Code for your mobile device"/>';

         switch ($type){
         case 'echo' :
         echo $qr;
         case 'return' :
         return $qr;
         }
    }

现在,这工作得很好,除了边距。

(为未链接实时 URL 道歉 - 我的 DEV 在本地机器上)

无论我尝试什么,我都无法让边距变为 0。首先我认为由于某种原因,可能校正级别 L 不接受 0 边距 - 我厌倦了&chld=M|1and &chld=L|0&chld=M|3甚至尝试更改参数的顺序和放在&chld=L|0字符串的末尾或完全省略。

但由于某种原因,我总是得到默认边距 4。

难道我做错了什么 ??

编辑我 - 在请求 URL 之后:生成的 URL 是:

<img src="http://chart.apis.google.com/chart?cht=qr&chs=50x50&chld=L|0&chl=http://localhost/wp-sandbox/?p=6164" width="50" height="50" alt="QR code" title="QR code for your phone"/>

编辑二

看看这个小提琴http://jsfiddle.net/obmerk99/rsjcM/

它证明了问题。

4

3 回答 3

13

谷歌图表有一个奇怪的特性,它会增加图像的大小,但不会增加代码的大小。

这将取决于代码中数据的大小。

看看这三个例子

150 - 无边距http://chart.apis.google.com/chart?cht=qr&chs=150x150&chld=L|0&chl=http://localhost/wp-sandbox/?p=6164

165 - 保证金http://chart.apis.google.com/chart?cht=qr&chs=165x165&chld=L|0&chl=http://localhost/wp-sandbox/?p=6164

180 - 无边距http://chart.apis.google.com/chart?cht=qr&chs=180x180&chld=L|0&chl=http://localhost/wp-sandbox/?p=6164

请记住 - 您的代码需要一个边距才能让大多数设备正确扫描它。

于 2012-07-06T10:21:57.163 回答
2

Google API 也存在同样的问题。所以我最终使用了这个替代服务:http ://api.qrserver.com/v1/create-qr-code/?data=http://www.google.com&size=104x104

API ( http://qrserver.com/api/documentation/create-qr-code/ ) 可以更好地控制所需的二维码图像输出。

于 2013-05-26T10:30:03.050 回答
1

在生成大量具有各种编码数据大小的二维码时,我遇到了同样的问题。

到目前为止,我发现生成代码可能会为每个条码像素强加相同数量的屏幕像素大小

所以,假设:

  • sw您要求的二维码高度/宽度,以屏幕像素为单位,比如说 150x150 像素
  • bw编码数据的条形码像素数,比如 20x20 像素
  • cw每个条形码像素的屏幕像素数:cw = ceil(sw /bw),所以这里 150/20 = 7,5 => cw=7
  • sw2以像素为单位的条码实际宽度:sw2 = cw * bw,所以这里 sw2=7*20=140 像素
  • mw以像素为单位的边距宽度:mw = (sw - sw2) / 2,所以这里的边距为 5 像素...

同样的例子,如果你要求一个 160x160 尺寸的二维码,你可能没有边距:160/20=8。

回到您最初的问题,减少边距大小的可变性意味着减少条形码像素的数量(但您无法控制它,因为它取决于 QR 码质量和编码数据的大小),或者增加生成的屏幕像素方面。

如果您要求无限维度,则边距没有更多变化,但我想知道 Google 是否会对此感到满意 :)

于 2013-01-23T11:43:06.013 回答