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()方法而不是返回Responseobject.

b) 使用文档中所写的数据 URI

$writer = new DataUriWriter($qrCode);
$dataUri = $writer->writeString();

我真的很想知道你是否读过Docs