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

时间:2014-06-03 15:27:44

标签: php

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

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

我尝试将$png图片定义为$png = QRcode::png($codeContents, $pngAbsoluteFilePath);,但它不起作用。您能告诉我如何定义$png变量,使其不是null或字符串作为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 />'; 
        } 

2 个答案:

答案 0 :(得分:4)

通过查看文档,似乎

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

创建文件并且不返回任何内容,而

QRcode::png("code data");

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

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

也就是说,你启动一个输出缓冲区,把PNG写入它,然后把它放到变量中并清理它。

答案 1 :(得分:1)

注意:似乎imagecreatefrompng严格需要从某处加载文件&amp;不能充当资源。但是这里留下这个答案是为了参考,因为这里有其他具体细节。

假设QRcode::png(…)的输出是PNG,您使用的是PHP QR Code,请更正吗? - 为什么不使用imagecreatefrompng

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

但是查看PHP QR Code的文档:

  
      
  • QRcode :: png(&#39;代码数据文字&#39;,&#39; filename.png&#39;); //创建文件
  •   
  • QRcode :: png(&#39; someothextxt 1234&#39;); //创建代码图片并将其直接输出到浏览器
  •   

这意味着您对QRcode::png(…)的调用应该排除$pngAbsoluteFilePath,如下所示:

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

通过这种方式,QRcode::png($codeContents)正在直接输出图像,然后imagecreatefrompng应该捕获该图像&amp;创建它作为PHP GD库可以使用的资源&amp;将其分配给$png