无法保存Milon Barcode生成的DNS2D图片:非静态方法调用错误
问题描述
- 使用Milon Barcode包生成QRCODE或数据矩阵(DNS2D格式)图片时,无法在内存中保存,报错:
The non-static method Milon\Barcode\DNS2D::getBarcodePNG() cannot be called statically - 生成DNS1D格式图片时,可通过
base64_decode正常保存 - 用户代码示例:
$pathQr_code = 'documents/qrcode/'. 'azienda-' . $business->id . '_posta-' . $post->id . '.png'; $qr_code = Storage::disk('public')->put($pathQr_code , base64_decode(DNS2D::getBarcodePNG("$post->qr_code", 'QRCODE')));
解决方案
问题根源是DNS2D类的getBarcodePNG()并非静态方法,不能直接通过类名静态调用(DNS1D的对应方法是静态的,因此可正常使用)。以下是两种可行解决方式:
方法1:手动实例化DNS2D类
直接创建DNS2D实例后调用方法,修改代码如下:
// 实例化DNS2D类 $dns2d = new \Milon\Barcode\DNS2D(); $pathQr_code = 'documents/qrcode/'. 'azienda-' . $business->id . '_posta-' . $post->id . '.png'; // 通过实例调用getBarcodePNG方法 $qr_code = Storage::disk('public')->put($pathQr_code, base64_decode($dns2d->getBarcodePNG("$post->qr_code", 'QRCODE')));
方法2:利用Laravel依赖注入
如果在控制器、服务类等Laravel容器管理的环境中,可通过依赖注入获取DNS2D实例:
use Milon\Barcode\DNS2D; public function generateQrCode(DNS2D $dns2d) { $pathQr_code = 'documents/qrcode/'. 'azienda-' . $business->id . '_posta-' . $post->id . '.png'; $qr_code = Storage::disk('public')->put($pathQr_code, base64_decode($dns2d->getBarcodePNG("$post->qr_code", 'QRCODE'))); }
生成数据矩阵(Data Matrix)
若需要生成数据矩阵格式,只需将方法的第二个参数替换为'DATAMATRIX':
$dns2d->getBarcodePNG("$post->qr_code", 'DATAMATRIX');
内容的提问来源于stack exchange,提问作者VALERIO MATRANGA
相关产品推荐
相关产品推荐

