如何将QRcode::png()的结果定义为一个变量


How to define the result of QRcode::png() as a variable

我有一个生成条形码的代码,并将其保存为PNG图像的文件夹。我想合并使用imagecopyresampled()函数的JPEG图像顶部的PNG文件。使用以下行生成PNG图像:

QRcode::png($codeContents, $pngAbsoluteFilePath); 

我试图将$png图像定义为$png = QRcode::png($codeContents, $pngAbsoluteFilePath);,但它不起作用。请让我知道如何定义$png变量,使其不是空或字符串作为imagecopyresampled()函数中的资源。

代码如下:

    include "/applications/AMPPS/www/files/phpqrcode/qrlib.php";
    include "/applications/AMPPS/www/files/phpqrcode/qrconfig.php";
    $codeContents = rand(1000000, 9999999); 
    // we need to generate filename somehow,  
    // with md5 or with database ID used to obtains $codeContents... 
    $fileName = '005_file_'.md5($codeContents).'.png'; 
    $pngAbsoluteFilePath = '/applications/AMPPS/www/files/barcodes/'. DIRECTORY_SEPARATOR .$fileName; 
    // generating 
    if (!file_exists($pngAbsoluteFilePath)) {
            QRcode::png($codeContents, $pngAbsoluteFilePath); 
            echo 'File generated!'; 
            echo '<hr />'; 
        } else { 
            echo 'File already generated! We can use this cached file to speed up site on common codes!'; 
            echo '<hr />'; 
        } 

通过查看文档,似乎

QRcode::png("code data", $pathToFile);

创建文件并且不返回任何东西,而

QRcode::png("code data");

直接输出它,所以如果你想把它保存到一个变量中,你可以这样做:

ob_start();
QRcode::png("code data");
$png = ob_end_clean();

也就是说,您启动一个输出缓冲区,将PNG写入其中,然后在变量中获取它并清除它。

注意:似乎imagecreatefrompng严格需要从某处加载文件&不能作为资源。但是把这个答案留在这里供参考,因为这里还有其他细节要讨论。

假设QRcode::png(…)的输出是png -你正在使用PHP QR码,对吗?-为什么不使用imagecreatefrompng呢?

$png = imagecreatefrompng(QRcode::png($codeContents, $pngAbsoluteFilePath));

但是看看PHP QR Code的文档:

  • QRcode::png('code data text', 'filename.png');//创建文件
  • QRcode::png('some othertext 1234');//创建代码图像并直接输出到浏览器

所以这意味着你对QRcode::png(…)的调用应该像这样排除$pngAbsoluteFilePath:

$png = imagecreatefrompng(QRcode::png($codeContents));

这样,QRcode::png($codeContents)直接输出图像,然后imagecreatefrompng应该捕获该&将其创建为PHP GD库可以使用的资源&赋值给$png