用PHP输出缓冲区捕获PNG流


Capturing PNG stream with PHP output buffer

我目前正在尝试编写一个web服务,为给定字符串生成QR码。我使用PHP QR码(http://phpqrcode.sourceforge.net/)来生成QR码,如下所示:

QRcode::png('PHP QR Code :)');

结果:屏幕上显示二维码的PNG流。由于这是一个直接输出到浏览器的空函数,这使我无法正确返回图像。

我想用PHP的输出缓冲区捕获PNG流,并让我的web服务返回这个捕获的图像。为了测试目的,我在一个普通的php页面上设置了以下测试代码:

include('/vendor/phpqrcode/qrlib.php');
$scancode = "testcode";
ob_implicit_flush(false); //just in case
ob_start();
QRcode::png($scancode);
$output = ob_get_contents();
ob_end_clean();
echo "--" . $output . "--";
die();

然而,当我运行代码时,缓冲区不像我计划的那样工作。无论我做什么,只要我调用该函数,就总是显示一个损坏的图像。当我移除输出缓冲区代码时,屏幕上呈现QR码。

为什么我的一些输出没有被捕获?

编辑:related: phpqrcode库返回图像作为字符串

删除头("内容类型:图像/png");

使用输出缓冲。

之后可以回显

header("content-type:image/png");和您捕获的输出显示图像