php二维码显示不正确
php qr code is not displaying correctly
我正在为我的应用程序和 endroid/qrcode 生成器使用 CakePHP 3.4 框架。
控制器里,我用过
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)
;
$this->set(compact('qrCode'));
在视图中
header('Content-Type: '.$qrCode->getContentType());
$qrCode->render(); ?>
但这是渲染为
可能是什么问题,它没有显示二维码图像?
如果您的Controller 方法只有returns QR 码图像,您应该没问题,将以下代码添加到您的Controller。
编辑: 检查了您正在使用的库的文档。您必须根据文档使用 Writer
。请阅读它们。未测试:
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
...
$response = $this->response;
$response = $response->withType($qrCode->getContentType(PngWriter::class))
->withStringBody($qrCode->writeString(PngWriter::class));
// Return response object – you won't have to have a View for this method
return $response;
// $this->set(...) from your code is obsolete
在视图中发送 headers 似乎是错误的,因为它是一个控制器任务。
编辑: 然后您可以使用控制器方法作为图像源,即。即:
<img src="/path/to/your/controller/action" alt="QR Code here">
如果您希望二维码显示在该方法的视图中而不是返回图像,您可以:
a) 将生成的二维码作为图像文件写入您的文件系统
使用库的Endroid\QrCode\QrCode::writeFile()
方法而不是返回Response
object.
b) 使用文档中所写的数据 URI
$writer = new DataUriWriter($qrCode);
$dataUri = $writer->writeString();
我真的很想知道你是否读过Docs。
我正在为我的应用程序和 endroid/qrcode 生成器使用 CakePHP 3.4 框架。
控制器里,我用过
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)
;
$this->set(compact('qrCode'));
在视图中
header('Content-Type: '.$qrCode->getContentType());
$qrCode->render(); ?>
但这是渲染为
可能是什么问题,它没有显示二维码图像?
如果您的Controller 方法只有returns QR 码图像,您应该没问题,将以下代码添加到您的Controller。
编辑: 检查了您正在使用的库的文档。您必须根据文档使用 Writer
。请阅读它们。未测试:
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
...
$response = $this->response;
$response = $response->withType($qrCode->getContentType(PngWriter::class))
->withStringBody($qrCode->writeString(PngWriter::class));
// Return response object – you won't have to have a View for this method
return $response;
// $this->set(...) from your code is obsolete
在视图中发送 headers 似乎是错误的,因为它是一个控制器任务。
编辑: 然后您可以使用控制器方法作为图像源,即。即:
<img src="/path/to/your/controller/action" alt="QR Code here">
如果您希望二维码显示在该方法的视图中而不是返回图像,您可以:
a) 将生成的二维码作为图像文件写入您的文件系统
使用库的Endroid\QrCode\QrCode::writeFile()
方法而不是返回Response
object.
b) 使用文档中所写的数据 URI
$writer = new DataUriWriter($qrCode);
$dataUri = $writer->writeString();
我真的很想知道你是否读过Docs。