Fastadmin 框架生成条形码

本文介绍了在 PHP 框架中集成一维码生成功能的方法。首先通过 Composer 安装 picqer/php-barcode-generator 三方类库,然后在 common/library 下封装 Barcode 类,提供获取 PNG 流、直接输出图片和保存到本地文件三种方法,最后在其他类中调用即可生成一维码。

目录

安装三方类库

封装类库

调用

总结


安装三方类库

命令

bash 复制代码
composer require picqer/php-barcode-generator:2.2.0

安装完成,版本为2.4

封装类库

在common/library下创建Barcode.php,以备框架中调用,

内容如下:

php 复制代码
<?php
require 'vendor/autoload.php';
use Picqer\Barcode\BarcodeGeneratorPNG;
use Picqer\Barcode\BarcodeGenerator;
class Barcode
{
    /**
     * 一维码类型常量映射,外部直接调用
     */
    const CODE_128 = BarcodeGenerator::TYPE_CODE_128;
    const EAN_13   = BarcodeGenerator::TYPE_EAN_13;
    const CODE_39  = BarcodeGenerator::TYPE_CODE_39;
    const UPC_A    = BarcodeGenerator::TYPE_UPC_A;
/**
     * 获取一维码PNG二进制流
     * @param string $code 条码内容
     * @param string $type 条码类型 BarcodeHelper::CODE_128
     * @param int $widthFactor 单条宽度
     * @param int $height 条码高度
     * @param array $color 条码颜色 [R,G,B]
     * @return string PNG图片二进制
     */
    public static function getBarcodeStream(
        string $code,
        string $type = self::CODE_128,
        int $widthFactor = 2,
        int $height = 90,
        array $color = [0, 0, 0]
    ): string {
        $generator = new BarcodeGeneratorPNG();
        // 强制使用GD库,避免imagick缺失报错(phpstudy默认只有gd)
        $generator->useGd();
return $generator->getBarcode($code, $type, $widthFactor, $height, $color);
    }
/**
     * 直接输出图片到浏览器(接口使用)
     * @param string $code
     * @param string $type
     * @return void
     */
    public static function outputBarcode(
        string $code,
        string $type = self::CODE_128
    ): void {
        $stream = self::getBarcodeStream($code, $type);
        header('Content-Type:image/png');
        echo $stream;
        exit;
    }
/**
     * 保存条码到服务器本地文件
     * @param string $code 条码内容
     * @param string $savePath 保存完整路径 ./storage/barcode/xxx.png
     * @param string $type
     * @return bool
     */
    public static function saveBarcode(
        string $code,
        string $savePath,
        string $type = self::CODE_128
    ): bool {
        $stream = self::getBarcodeStream($code, $type);
        // 自动创建目录
        $dir = dirname($savePath);
        if (!is_dir($dir)) {
            mkdir($dir, 0755, true);
        }
        return file_put_contents($savePath, $stream) !== false;
    }
}

调用

在其他类中调用这个一维码类,并设置文件名称和路径,如下:

php 复制代码
$obj = new \app\common\library\Barcode();
$savePath = '/uploads/barcode/'.time().'.png';

总结

本文介绍了在 PHP 框架中集成一维码生成功能的方法。首先通过 Composer 安装 picqer/php-barcode-generator 三方类库,然后在 common/library 下封装 Barcode 类,提供获取 PNG 流、直接输出图片和保存到本地文件三种方法,最后在其他类中调用即可生成一维码。

相关推荐
大白玉米18 小时前
MoxPlayer 弹幕播放器源码智能解析线路管理系统自研内核
php
测试界的小码农2 天前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
叼烟扛炮2 天前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮2 天前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
zhikouai2 天前
把外部助手接进聊天软件的架构分层与参数配置
服务器·网络·php
叼烟扛炮3 天前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮3 天前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
vipxieliang3 天前
语言对比卡:PHP vs Go vs Java 的优缺点、适用场景与「为什么选 PHP」
java·go·php
东鹏特饮3 天前
系统运维(传统/通用运维)面试题
开发语言·php
多客:duokelijie4 天前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署