发布作者: 云峥
百度收录: 正在检测是否收录...
作品采用: 《 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 》许可协议授权
在移动互联网时代,二维码已成为连接线上线下的重要桥梁。本文将手把手教你如何使用PHP快速搭建一个高性能的二维码生成API,无需复杂配置,5分钟即可上线!
如何将Base64编码的二维码转换为可访问的图片链接(完整指南)
我们采用目前最稳定的方案:
确保服务器已安装PHP环境
安装Composer:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
<?php
header('Content-Type: application/json; charset=utf-8');
ini_set('display_errors', 0);
try {
// 接收参数
$data = $_GET['data'] ?? 'https://www.uctb.cn';
$size = min(1000, intval($_GET['size'] ?? 300));
$margin = intval($_GET['margin'] ?? 4);
$level = strtoupper($_GET['level'] ?? 'L');
// 验证依赖
if (!file_exists(__DIR__.'/vendor/autoload.php')) {
throw new Exception('请先运行 composer install');
}
require __DIR__.'/vendor/autoload.php';
// 错误校正级别映射
$levelMap = [
'L' => new Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow(),
'M' => new Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelMedium(),
'Q' => new Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelQuartile(),
'H' => new Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh()
];
if (!isset($levelMap[$level])) {
throw new Exception('容错级别仅支持 L/M/Q/H');
}
// 生成二维码
$qrCode = new Endroid\QrCode\QrCode($data);
$qrCode->setSize($size);
$qrCode->setMargin($margin);
$qrCode->setErrorCorrectionLevel($levelMap[$level]);
$writer = new Endroid\QrCode\Writer\PngWriter();
$result = $writer->write($qrCode);
// 返回结果
echo json_encode([
'status' => 'success',
'data' => 'data:image/png;base64,'.base64_encode($result->getString())
]);
} catch (Exception $e) {
echo json_encode([
'status' => 'error',
'message' => $e->getMessage()
]);
}
exit;
mkdir qr-api && cd qr-api
composer require endroid/qr-code
server {
listen 80;
server_name yourdomain.com;
root /path/to/qr-api;
location / {
try_files $uri /api.php;
}
}
请求方式
GET /api.php?data=内容&size=尺寸&margin=边距&level=容错级别
参数说明
参数 | 必填 | 说明 |
---|---|---|
data | 否 | 编码内容(默认:https://www.uctb.cn) |
size | 否 | 图片尺寸px(默认300,最大1000) |
margin | 否 | 边距px(默认4) |
level | 否 | 容错级别L/M/Q/H(默认L) |
成功响应
{
"status": "success",
"data": "data:image/png;base64,..."
}
错误响应
{
"status": "error",
"message": "错误信息"
}
生成普通二维码
/api.php?data=https://example.com
生成带LOGO的二维码(进阶)
// 在生成代码后添加:
$logo = imagecreatefrompng('logo.png');
$qr = imagecreatefromstring($result->getString());
// ...合并图片逻辑...
前端调用示例
<img src="/api.php?data=HelloWorld&size=200"
alt="二维码">
Q:为什么返回的是Base64而不是直接图片?
A:便于API统一返回JSON格式,前端可直接用于img标签的src属性
Q:如何提高容错率?
A:使用level=H参数,但会增大二维码尺寸
Q:支持中文内容吗?
A:完全支持,会自动进行URL编码处理
通过这个不足 50
行的PHP脚本,我们实现了一个功能完备的二维码生成API。相比第三方服务,自建API具有以下优势:
建议将此API部署在你的服务器上,为你的应用快速添加二维码生成能力!
—— 评论区 ——