You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法保存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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:19:52