使用PHP动态生成QR代码

AKo*_*Kor 92 php qr-code

我正在尝试在我的网站上生成QR码.他们所要做的只是在其中有一个URL,我的网站上的变量将提供.最简单的方法是什么?

小智 168

值得补充的是,除了@abaumg发布的QR码库之外,Google还提供了一个QR码API QR Code API 非常感谢@Toukakoukan链接更新.

要使用它,基本上:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
Run Code Online (Sandbox Code Playgroud)
  • 300x300 是您要生成的QR图像的大小,
  • chl是您要更改为QR码的网址编码字符串,以及
  • choe是(可选的)编码.

上面的链接提供了更多细节,但是使用它只是让src图像指向被操纵的值,如下所示:

<img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8" title="Link to Google.com" />
Run Code Online (Sandbox Code Playgroud)

演示:

  • 应该注意的是,这已被弃用.谷歌计划在2015年之前继续提供支持.所以一如既往,需要谨慎行事. (11认同)
  • 2019 年 9 月 - 至今仍在工作! (8认同)
  • 使用Google API有任何限制吗?我的意思是限制:给定时间内的请求数量等. (4认同)
  • @Lobo根据他们的[文件](https://developers.google.com/chart/image/docs/making_charts):"*有没有限制到每天的呼叫您可以对谷歌图表API的数量然而,我们保留阻止任何我们认为滥用的用途的权利.*". (4认同)
  • 我找到@abaumg的答案更好,因为它不依赖谷歌等第三方...... (3认同)
  • 他们想出任何替代方案吗?我在2015年4月左右阅读了Google的日落图API(QR码). (2认同)
  • @anon我已将此标记为"主持人干预",以查看mod是否可以取消接受答案(在发布时这是一个有效且相关的答案但不再如此).这个SO问题是"php qr代码库"的第二个结果(我是如何到达这里的)所以我认为即使OP不再关注,问题仍然是最新的非常重要. (2认同)

aba*_*umg 83

使用PHP生成QR代码的最简单方法是phpqrcode库.

  • +1这样可以更仔细地回答问题,您可以自己生成QR码,而不受针对请求强制执行的Google限制的限制.即使谷歌端点合同发生变化,这也将确保您的网站正常运行. (5认同)
  • 公平警告:看起来这个库可能已经“死了”——自 2010 年 10 月以来,作者就没有更新过它,并且问题跟踪器中有几个补丁,库的用户在使用该库之前应考虑应用这些补丁。 (2认同)

Raf*_*shi 22

phpqrcode库是非常快的配置和API文档是很容易理解.

除了abaumg的回答,我还附上PHPhttp://phpqrcode.sourceforge.net/examples/index.php中的两个例子.

1.二维码编码器

首先包括本地路径中的库

include('../qrlib.php');
Run Code Online (Sandbox Code Playgroud)

然后直接输出图像作为PNG流做例如:

QRcode::png('your texte here...');
Run Code Online (Sandbox Code Playgroud)

将结果保存在本地作为PNG图像:

$tempDir = EXAMPLE_TMP_SERVERPATH;

$codeContents = 'your message here...';

$fileName = 'qrcode_name.png';

$pngAbsoluteFilePath = $tempDir.$fileName;
$urlRelativeFilePath = EXAMPLE_TMP_URLRELPATH.$fileName;

QRcode::png($codeContents, $pngAbsoluteFilePath); 
Run Code Online (Sandbox Code Playgroud)

2. QR码解码器

另见zxing解码器:

http://zxing.org/w/decode.jspx

检查输出非常有用.

3.数据格式列表

您可以根据数据类型在QR码中使用的数据格式列表:

  • 网站网址:http://stackoverflow.com(包括protocole http://)
  • 电子邮件地址:mailto:name@example.com
  • 电话号码:+16365553344(包括国家代码)
  • 短信:smsto:number:message
  • 彩信:mms:号码:主题
  • YouTube视频:youtube:// ID(可能适用于iPhone,非标准化)

http://blog.thenetimpact.com/2011/07/decoding-qr-codes-how-to-format-data-for-qr-code-generators/上的更多数据类型

  • 我可以将php-qrcode库用于商业用途,例如开发一个需要部分qr代码的网站吗? (2认同)

Iwa*_*aru 14

所述endroid/QRCODE库易于使用,保持良好,并且可以使用作曲家安装.还有一个可以直接与Symfony一起使用的软件包.

安装:

$ composer require endroid/qrcode
Run Code Online (Sandbox Code Playgroud)

用法:

<?php

use Endroid\QrCode\QrCode;

$qrCode = new QrCode();
$qrCode
    ->setText('Life is too short to be generating QR codes')
    ->setSize(300)
    ->setPadding(10)
    ->setErrorCorrection('high')
    ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
    ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
    ->setLabel('Scan the code')
    ->setLabelFontSize(16)
    ->setImageType(QrCode::IMAGE_TYPE_PNG)
;

// now we can directly output the qrcode
header('Content-Type: '.$qrCode->getContentType());
$qrCode->render();

// or create a response object
$response = new Response($qrCode->get(), 200, array('Content-Type' => $qrCode->getContentType()));
Run Code Online (Sandbox Code Playgroud)

生成的QRCode


pra*_*890 9

Github上的qrcode-generator.最简单的脚本,像魅力一样.

优点:

  • 没有第三方依赖
  • QR码生成数量没有限制


Qui*_*ant 5

我知道问题是如何使用 PHP 生成 QR 码,但对于其他正在寻找一种方法来为网站生成代码的人来说,使用纯 JavaScript 执行此操作是一个很好的方法。在jQuery的QR码的jQuery插件是否良好。


Pet*_*ter 5

我一直在使用google qrcode api,但我不太喜欢这个,因为它需要我在互联网上访问生成的图像。

我做了一些命令行研究,发现 linux 有一个qrencode用于生成二维码的命令行工具。

我写了这个小脚本。好的部分是生成的图像小于 1KB。那么提供的数据只是一个网址。

$url = ($_SERVER['HTTPS'] ? "https://" : "http://").$_SERVER['HTTP_HOST'].'/profile.php?id='.$_GET['pid'];
$img = shell_exec('qrencode --output=- -m=1 '.escapeshellarg($url));

$imgData = "data:image/png;base64,".base64_encode($img);
Run Code Online (Sandbox Code Playgroud)

然后在 html 中加载图像:

<img class="emrQRCode" src="<?=$imgData ?>" />
Run Code Online (Sandbox Code Playgroud)

你只需要安装它。[Linux 上的大多数成像应用程序都会在您没有意识到的情况下将其安装在引擎盖下。