我有一个生成条形码的代码,并将其保存为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