用PHP动态生成QR代码


98

我正在尝试在我的网站上生成QR码。他们要做的就是在其中包含一个URL,该URL将在我的网站上提供。最简单的方法是什么?


9
不要重新发明轮子!以下的答案是完美的
乔丹砷

4
Akor:您能不能接受我的回答?Google已经弃用了我的答案所依赖的API,因此从现在开始它几乎没有用。
大卫说恢复莫妮卡

Answers:


182

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

要使用this,基本上是:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 是您要生成的QR图像的尺寸,
  • chl是您要更改为QR码的url编码的字符串,并且
  • 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" />

演示:


4
使用Google API有任何限制吗?我的意思是限制为:在给定时间,请求量等
洛沃

11
应当指出,此方法已被弃用。Google计划在2015年之前继续提供支持。因此,一如既往,告急。
blainarmstrong

4
@Lobo根据他们的文档:“ 您每天对Google Chart API的调用次数没有限制。但是,我们保留阻止任何我们认为滥用的使用的权利。
Alexandru Guzinschi 2014年

3
我发现@abaumg的答案更好,因为它不依赖于像google这样的第三方...
2014年

4
2019年9月-截至目前仍在工作!
Anupam

87

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


6
+1可以更紧密地回答问题,您可以自己生成QR码,而不受Google对请求的限制的限制。这也将确保您的网站正常运行,即使Google端点合同发生了变化。
Sunny R Gupta

合理的警告:该库似乎已“过时”-作者自2010年10月以来尚未对其进行更新,并且在问题跟踪器中有几个补丁,该库的用户应在使用该库之前考虑应用。
CubicleSoft 2013年

但是如何将其转换为mvc标准的任何想法!
saurabh kamble 2014年

@CubicleSoft我认为开发人员会认真对待您的评论并立即进行更新
mokNathal 2015年

@mokNathal-我在这里看不到任何不同。“下载”页面上提供的最新版本仍为2010
。– CubicleSoft 2015年

24

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

除了abaumg的答案外,我还附加PHPhttp://phpqrcode.sourceforge.net/examples/index.php中的 2个示例

1. QR码编码器

首先从您的本地路径包含库

include('../qrlib.php');

然后将图像直接输出为PNG流,例如:

QRcode::png('your texte here...');

将结果保存为本地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); 

2. QR码解码器

另请参见zxing解码器:

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

检查输出非常有用。

3.数据格式清单

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

  • 网站网址:http : //stackoverflow.com(包括协议http://
  • 电子邮件地址:mailto:name@example.com
  • 电话号码:+16365553344(包括国家/地区代码)
  • 短信:smsto:数字:消息
  • MMS讯息:mms:number:subject
  • YouTube视频:youtube:// ID(可能在iPhone上运行,未标准化)

这个库似乎没有对各种输入,小和简单的文字工作都还可以,虽然
duckduckgo

你能举个例子吗?
RafaSashi

没什么,当我执行$ codeContents =“ www.example.com”没问题时,但是如果我执行$ codeContents =“ www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=”,则无法显示正确的图像。
Duckduckgo 2014年

我无法重现该错误。与QRcode :: png正常工作('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌r1B0='); 也许与标头有关
RafaSashi

2
我是否可以将php-qrcode库用于商业用途,例如开发一个需要使用qr代码的网站?
Suneeta Singh 2014年

16

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

安装:

$ composer require endroid/qrcode

用法:

<?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()));

生成的QRCode


Iwazaru先生,setText()如果我有多个数据,该如何使用?例如,我有$a = 1$b = 2$c = 3?。我需要使用超过ONE句子或字符串。我怎样才能做到这一点?

由于该setText方法仅接受一个参数,我猜您应该在传递变量之前将变量连接为一个。但是我不确定我是否正确理解了您的问题,也许您应该在图书馆的库中打开一个问题。
Iwazaru '16

Iwazaru我已经得到了答案先生..

想分享吗?;)
Iwazaru's

1
当然:)我在php中使用implode()合并了所有数据,然后在需要时进行explode()。就是这样,先生:)

10

Github上的qrcode-generator。最简单的脚本,就像魅力。

优点:

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

我找不到任何相关文档,但看起来很棒!
比约恩Ç

@ praba230890您可以使用此脚本提供更多示例吗?我正在尝试以QR码300x300 px获取一些联系信息,我已经在本地主机上安装/下载了脚本,并且sample_html.php正常工作。但是其他两个没有。我的日语不太好(好,我会用Google翻译)
Alex

哦,这会比phpqrcode库更快/更好吗?
Alex

真是绝望。
navjot singh's

5

我曾经使用过google qrcode api,但是我不太喜欢这样做,因为它要求我必须在Internet上才能访问生成的图像。

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

我写了这个小脚本。好的部分是生成的图像大小小于1KB。好吧,提供的数据只是一个URL。

$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);

然后在html中加载图像:

<img class="emrQRCode" src="<?=$imgData ?>" />

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


8
如果您去了怎么办http://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J

escapeshellarg这里解释(对于那些想知道) - stackoverflow.com/a/22739494/195722。就个人而言,我不会每次都使用命令(特别是对于面向公众的一代),并且我肯定会使用正则表达式来确保它们传入的是我期望的字符串。
娜塔莉·亚当斯

在ubuntu 16.04上运作良好
Asuquo12 '19

4

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


我现在使用Jquery插件github.com/lrsjng/jquery-qrcode已有一段时间了,也很漂亮。但是,输出仅为二进制。因此,如果您需要生成图像并将其另存为PNG,将无济于事。这就是为什么大多数阅读此问题的开发人员都需要PHP。
Kai Noack

可能在客户端下载一个JS生成的数据图像100%。
Quinn Comendant

抱歉,不清楚。我的意思是“保存服务器端”-仅使用Javascript不可能。
Kai Noack
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.