我正在使用Endroid''QrCode用PHP生成QR码。这一切都很好用,但我还是会发布代码。我正在尝试向我的页面添加一个下载按钮,使其更加用户友好,而不是必须右键单击图像并从上下文菜单中选择另存为。但是,它不是下载图像 (.png) 文件,而是将当前页面下载为.htm文件。对于PHP生成的图像而不仅仅是原始的png图像,是否有不同的方法可以做到这一点?
.PHP:
<?php require_once '../control.php';
require_once '../vendor/autoload.php';
use Endroid'QrCode'QrCode;
$qrCode = new QrCode();
if($_GET['url'] != ''){
$qrCode->setText($_GET['url']);
} else {
$qrCode->setText(SITEHTMLROOT);
}
if($_GET['size'] != ''){
$qrCode->setSize($_GET['size']);
} else {
$qrCode->setSize(200);
}
if($_GET['padding'] != ''){
$qrCode->setPadding($_GET['padding']);
} else {
$qrCode->setPadding(10);
}
if($_GET['label'] != ''){
$qrCode->setLabel($_GET['label']);
}
if($_GET['text_size'] != ''){
$qrCode->setLabelFontSize($_GET['text_size']);
} else {
$qrCode->setLabelFontSize(16);
}
$qrCode
->setErrorCorrection('high')
->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
->render()
;
?>
Javascript:
var getQRCode = function () {
var url = $('#site_url').val();
var size = $('#qr_size').val();
var padding = $('#qr_padding').val();
var label = $('#qr_label').val();
var text_size = $('#qr_text_size').val();
var QRcode = $('#final_QRCode');
var get = '?url=' + url +'&&size=' + size + '&&padding=' + padding + '&&label=' +
label + '&&text_size=' + text_size;
QRcode.attr('src', htmlroot + 'cgi/qrcode.php' + get);
$('#qr_code_download').attr('src', htmlroot + 'cgi/qrcode.php' + get);
};
HTML 按钮和图像:
<label>Your QR Code</label>
<div class="row"><img src="" id="final_QRCode" /></div>
<a href="#" id="qr_code_download" download="My QR Code">
<div class="button special fit">Download This QR Code</div></a>
图片网址格式:
http://www.example.com/qrcode.php?url=myurl.html&size=300&padding=10&label=&text_size=16
为确保获取正确的网址,请查看浏览器的开发者工具网络选项卡。我建议对javascript代码进行以下修改应该会有所帮助 - 添加CDATA括号意味着您可以在不破坏HTML验证的情况下使用内部的任何字符,并且URL应该具有单与号来分隔参数而不是双与号。
<script type="text/javascript"><![CDATA[
var getQRCode = function () {
var url = $('#site_url').val();
var size = $('#qr_size').val();
var padding = $('#qr_padding').val();
var label = $('#qr_label').val();
var text_size = $('#qr_text_size').val();
var QRcode = $('#final_QRCode');
var get = '?url=' + url +'&size=' + size + '&padding=' + padding + '&label=' + label +
'&text_size=' + text_size;
QRcode.attr('src', htmlroot + 'cgi/qrcode.php' + get);
$('#qr_code_download').attr('href', htmlroot + 'cgi/qrcode.php' + get);
};
]]></script>
此外,可能值得在 PHP 脚本中添加一些 HTTP 标头,以确保浏览器理解它正在接收的内容类型,就在 QR 码渲染语句之前,然后故意省略结束 PHP 标记,因为这会允许尾随空格干扰输出:
<?php
header( 'Content-type: image/png' );
$qrCode->setErrorCorrection('high')
->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
->render();
exit;