我有一个生成条形码的代码,并将其作为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 />';
}
答案 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
。