营销级二维码生成术:Java如何打造专属标识

Spring Boot项目实战:5分钟搞定ZXing生成带Logo的二维码(附完整源码) 本文详细介绍了如何使用Spring Boot和ZXing库快速实现带Logo的企业级二维码生成服务。通过完整的代码示例和实战技巧,开发者可以轻松掌握二维码生成、Logo叠加、RESTful API构建等核心技术,并了解性能优化、安全防护等生产环境最佳实践。 阅读详情

01 引言

二维码技术已经非常成熟了,应用非常广泛,如收付款、交友、旅游等。作为技术人,如此好用的二维码是如何生成的呢?

二维码的生成有很多小工具已经实现的非常好了,如草料二维码、掘金插件的快捷工具等。要集成在项目中的话,这些小工具用起来就没有那么方便了,我们就需要定制属于自家的二维码。

02 二维码

要生成二维码我们需要依赖一些优秀的开源框架,本章将介绍两种:

2.1 ZXing

ZXing是谷歌开源的一款功能强大、多格式的条形码(1D)和二维码(2D)的图像处理库。它的主要强项在于 解码(读取/识别),但也包含基本的编码(生成)功能。

Github地址:https://github.com/zxing/zxing

2.2 QR-Code-generator

QR-Code-generator是一款通用的库, 专注于生成 QR Code 二维码的开源库。它的目标是提供简单、轻量级、高效且可移植的 QR 码生成解决方案。代码库非常小巧(核心 C 实现只有两个源文件),编译后体积小,运行时内存占用低,生成速度快。

Github地址:https://github.com/nayuki/QR-Code-generator

03 ZXing实战

需要的依赖

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
</dependency>

3.1 普通的二维码

@Test
void test01() throws Exception {
    String content = "编程朝花夕拾";
    int width = 300, height = 300;

    // 创建矩阵
    BitMatrix matrix = new MultiFormatWriter().encode(
            content,
            BarcodeFormat.QR_CODE,
            width,
            height,
            // 设置边框和编码
            Map.of(EncodeHintType.MARGIN, 1, EncodeHintType.CHARACTER_SET, "utf-8") 
    );

    MatrixToImageWriter.writeToPath(matrix, "PNG", Paths.get("qrcode.png"));
}

结果

3.2 带logo的二维码

@Test
void test02() throws Exception {
    // 读取二维码
    BufferedImage qrImage = ImageIO.read(new File("qrcode.png"));
    Graphics2D graphics = qrImage.createGraphics();

    // 读取Logo并缩放
    BufferedImage logo = ImageIO.read(new File("src/main/resources/bgimages/logo.png"));
    int logoSize = qrImage.getWidth() / 5; // Logo大小为二维码1/5
    int x = (qrImage.getWidth() - logoSize) / 2;
    int y = (qrImage.getHeight() - logoSize) / 2;

    // 绘制Logo
    graphics.drawImage(logo, x, y, logoSize, logoSize, null);
    graphics.dispose();

    // 保存带Logo的二维码
    ImageIO.write(qrImage, "PNG", new File("qrcode_logo.png"));
}

结果

3.3 带文案的二维码

@Test
void test03() throws Exception {
    String text = "测试文案";
    // 读取二维码
    BufferedImage qrImage = ImageIO.read(new File("qrcode.png"));
    int textHeight = 30; // 文字区域高度

    // 创建新画布(二维码高度 + 文字区域)
    BufferedImage combined = new BufferedImage(
            qrImage.getWidth(),
            qrImage.getHeight() + textHeight,
            BufferedImage.TYPE_INT_RGB
    );

    Graphics2D g = combined.createGraphics();
    g.setBackground(Color.WHITE);
    g.clearRect(0, 0, combined.getWidth(), combined.getHeight());

    // 绘制二维码
    g.drawImage(qrImage, 0, 0, null);

    // 绘制文字(居中)
    g.setColor(Color.BLACK);
    g.setFont(new Font("微软雅黑", Font.PLAIN, 20));
    int textWidth = g.getFontMetrics().stringWidth(text);
    int textX = (combined.getWidth() - textWidth) / 2;
    int textY = qrImage.getHeight() + 25;
    g.drawString(text, textX, textY);
    g.dispose();

    ImageIO.write(combined, "PNG", new File("qrcode_text.png"));
}

结果

3.4 解析二维码

@Test
void test04() throws Exception {
    BufferedImage image = ImageIO.read(new File("qrcode.png"));
    LuminanceSource source = new BufferedImageLuminanceSource(image);
    Result result = new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(source)));
    System.out.println("解码内容: " + result.getText());
    // 解码内容: 编程朝花夕拾
}

3.5 使用技巧

ZXing提供了丰富的功能,熟练使用需要了解其API,门槛稍高。尤其需要对Graphics2D了解,才能绘制准确的二维码。Hutool这款国产的工具包,为了我们封装了更加方便的API,无需关心内部实现,之间输入关键参数即可。

需要引入Hutool的依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>${latest.version}</version>
</dependency>

案例:

@Test
void test03() throws IOException {
    QrConfig qrConfig = new QrConfig();
    qrConfig.setImg(new File("src/main/resources/bgimages/watermark.png"));
    BufferedImage generate = QrCodeUtil.generate("编程朝花夕拾!", qrConfig);
    ImageIO.write(generate, "png", new File("qr-code3.png"));
}

结果:

生成一个带logo的二维码,比ZXing简单多了。Hutool对二维码的封装是基于ZXing的,所以使用时也需要引入ZXing的依赖。

04 QR-Code-generator实战

QR-Code-generator没有Maven依赖,但是有jar,我们可以通过将jar导入项目或者上传到自己的私服使用。

@Test
void test01() throws IOException {
    QrCode qrCode = QrCode.encodeText("编程朝花夕拾", Ecc.LOW);
    System.out.println(qrCode.size);
    BufferedImage image = toImage(qrCode, 2, 2);
    ImageIO.write(image, "png", new File("qr-code.png"));
}

其中toImage也是官方提供的:

摘录方法:

private BufferedImage toImage(QrCode qr, int scale, int border) {
    return toImage(qr, scale, border, 0xFFFFFF, 0x000000);
}

private BufferedImage toImage(QrCode qr, int scale, int border, int lightColor, int darkColor) {
    Objects.requireNonNull(qr);
    if (scale <= 0 || border < 0)
        throw new IllegalArgumentException("Value out of range");
    if (border > Integer.MAX_VALUE / 2 || qr.size + border * 2L > Integer.MAX_VALUE / scale)
        throw new IllegalArgumentException("Scale or border too large");

    BufferedImage result = new BufferedImage((qr.size + border * 2) * scale, (qr.size + border * 2) * scale, BufferedImage.TYPE_INT_RGB);
    for (int y = 0; y < result.getHeight(); y++) {
        for (int x = 0; x < result.getWidth(); x++) {
            boolean color = qr.getModule(x / scale - border, y / scale - border);
            result.setRGB(x, y, color ? darkColor : lightColor);
        }
    }
    return result;
}

如果需要添加logo或者文案时,需要和上面的ZXing的案例,自行添加即可。

结果

05 小结

特性ZXingQR-Code-generator
核心功能强大的多格式条码解码 + 基础编码专注高效的 QR Code 生成
支持的条码类型极其广泛 (QR, Data Matrix, PDF417, 各种1D码等)仅 QR Code 和 Micro QR Code
解码能力非常强大 (是其核心优势)无 (纯生成库)
生成能力支持多种格式生成,但定制性通常不如专用库优秀 (专注于 QR 生成,轻量高效)
跨平台/语言支持广泛 (Java 核心 + 多语言/平台端口)极佳 (C 核心 + 众多轻量级语言包装器)
库大小/依赖相对较大 (尤其 Java 核心),可能有较多依赖非常轻量 (核心 C 仅两文件,无依赖)
资源消耗相对较高非常低 (适合嵌入式/资源受限环境)
主要优势全能解码,多格式支持,移动端集成成熟轻量,高效,易移植,专注 QR 生成
典型应用场景扫码 App、需要识别多种条码的系统Web/App/嵌入式中生成 QR 码、需要轻量集成的场景
主要优势全能解码,多格式支持,移动端集成成熟轻量,高效,易移植,专注 QR 生成
典型应用场景扫码 App、需要识别多种条码的系统Web/App/嵌入式中生成 QR 码、需要轻量集成的场景

看了这两款的开源二维码技术,你更喜欢那一种呢?

真实运营案例:从“空城”到“嗨场”,智能KTV如何用3个月俘获3000铁杆歌友? 在KTV行业普遍感叹“生意难做”的今天,一家位于社区周边、仅有15个包间的传统量贩式KTV,却在短短3个月内,凭借一套智能化的自助运营系统,实现了营业额翻两番的惊人逆袭。每日、每周、每月的营收报表自动生成,营收构成、支付方式、订单来源一目了然,让财务对账从繁琐的体力活,变成了轻松的看数据报表。系统内置的评价管理功能,能实时提醒老板新收到的评价。传统的KTV老板们,大多还在守着“等客上门”的老皇历,依赖黄金地段和低价团购苦苦支撑,最后却发现,顾客越来越难“伺候”,包厢空置率居高不下,营收连支付房租都成问题。 阅读详情

相关推荐

Android二维码扫描应用开发实战:仿微信效果

Zxing(”Zebra Crossing”)是一个开源的、用Java实现的库,支持多种平台,包括Java SE,Java ME和Android,它能够识别多种格式的一维条形码和二维码。Zxing库的主要特点包括:多平台支持:能够在不同的设备和操作系统上运行,提高应用的兼容性。高速扫描:通过优化的算法,Zxing可以快速识别条形码和二维码。高识别率:即便在低分辨率或者图像质量不佳的情况下,Zxing仍然具有很高的识别率。易于集成。

weixin_35754962的博客 926

推荐项目:QRGenerator - 打造个性化的二维码解决方案

推荐项目:QRGenerator - 打造个性化的二维码解决方案 在数字时代,二维码已无处不在,从名片到产品标签,从宣传海报到日常支付,它都是信息传输的快捷通道。今天,我们要向大家推荐一个简单而强大的开源库 —— QRGenerator,它是开发人员和设计者实现高效、个性化二维码需求的理想选择。 项目介绍 QRGenerator 是一个专注于生成二维码的Java库,支持将生成的二维码保存为图像文件...

gitblog_00096的博客 509

实体店会员营销系统全栈实战:Spring Boot + Uni-app构建数字化增长闭环

会员管理与私域流量运营已成为实体零售数字化转型的核心。其技术原理在于通过前后端分离架构,将用户行为数据化,并基于数据驱动实现精准营销,从而提升客户忠诚度和复购率。在技术价值上,一套高内聚、低耦合的系统能够显著降低运营成本,实现营销活动的自动化与效果可衡量。典型的应用场景包括餐饮、零售门店通过小程序发放优惠券、管理积分,以及通过数据分析进行会员分层运营。本文以实战项目为例,详细阐述了如何运用Spring Boot与Uni-app等技术栈,构建一个涵盖会员、积分、卡券等核心模块的完整数字化营销闭环,并深入探讨了

weixin_33755557的博客 397

友得云客房产小程序:一站式开源房产营销解决方案终极指南

想要快速搭建专业的房产营销小程序吗?友得云客房产小程序为您提供了一套完整的开源解决方案。作为专为房产行业打造的线上营销获客平台,这款房产小程序集房源管理、经纪人名片、智能找房、数据分析于一体,帮助房产开发商、中介机构和房产自媒体轻松实现数字化转型。无论您是技术爱好者还是普通用户,都能通过本文的完整指南快速上手这款功能强大的房产营销工具。 ## 🏆 项目亮点:为什么选择友得云客 友得云客房产小

gitblog_00579的博客 401

医疗设备安规入门:一张图搞懂BF型设备的MOOP/MOPP绝缘路径(附GB 9706.1附录解析)

本文深入解析了BF型医疗设备的MOOP/MOPP绝缘路径设计,结合GB 9706.1标准附录J的实战应用,帮助工程师快速掌握医疗设备安规要点。通过典型绝缘路径图分析,详细对比了MOOP与MOPP的防护差异,并提供了海拔修正、漏电流测试等关键设计指南,助力医疗设备安全合规。

weixin_30633405的博客 393

wsl2上运行带有Isaac Gym的程序报错: GPU Pipeline: disabled

显示GPU Pipeline:disabled,查找相关文档发现是WSL2目前不支持Isaac Gym,时,想要在wsl2上运行,最后报错如下。

2303_78660611的博客 960

友得云客房产小程序:用开源技术重构房产营销数字化体验

你是否正在寻找一款能快速部署、功能完善的房产营销系统?友得云客房产小程序为你提供了一个完整的开源解决方案,专为房产行业量身打造,涵盖一手房、二手房、租房房源发布、电子名片、二维码海报等核心营销功能,帮助房产开发商、代理商和房产自媒体实现线上获客数字化转型。 ## 🚀 项目速览:房产营销的数字化引擎 友得云客是一个基于Java/SpringBoot和Vue技术栈的房产行业小程序系统,让你在3天

gitblog_00902的博客 317

Arxml文件可视化:当汽车软件架构遇见交互式设计工具

本文探讨了Arxml文件在汽车电子系统开发中的可视化技术,结合AUTOSAR架构标准,介绍了如何利用现代Web技术构建交互式设计工具。通过三维组件关系图、动态数据流展示和版本对比等功能,显著提升开发效率和架构评审质量,适用于MBD和ASPICE开发流程。

weixin_29050271的博客 429

Java打造自助洗车软硬件结合系统源码:技术架构全解析

Java自助洗车系统采用分层架构设计,包含Uniapp小程序前端、SpringBoot业务层和MySQL/Redis数据层,通过MQTT协议实现硬件设备控制。系统采用微服务架构,包含用户、订单、设备等独立服务模块,集成智能调度算法优化资源分配。核心功能包括扫码洗车、设备监控和营销工具,采用Nginx负载均衡和Redis缓存保障高并发性能。技术亮点包括AI图像识别车辆脏污程度、ETC自动扣款等智能化功能,支持社区和高速服务区等多场景应用,确保系统高效稳定运行。

小马总的博客 842

Android开发者必看:火山引擎API验签实战,5分钟搞定年龄变化接口调用

本文为Android开发者提供火山引擎API验签实战指南,重点解析HMAC-SHA256签名算法实现,并以年龄变化接口为例展示完整调用流程。通过OkHttp封装和性能优化建议,帮助开发者5分钟内快速集成火山引擎人像处理功能,解决API调用中的签名验证、参数编码等核心问题。

weixin_30342209的博客 321

43、基于机器学习的GNSS信号质量监测方法

本文提出了一种基于支持向量机(SVM)的GNSS信号质量监测方法,旨在有效检测邪恶波形(EWF)威胁并抑制多径干扰对导航精度的影响。通过构建包含现场采集与合成数据的数据集,结合11个相关器测量值、链路预算、仰角和方位角等特征,采用RBF核函数的SVM模型进行分类。研究评估了不同平滑时间窗口对漏检率和误报率的影响,结果表明在约35-40秒平滑时间下性能趋于稳定,并可通过多数投票机制进一步优化检测性能。该方案适用于星载GNSS接收器,在计算资源受限条件下实现了高可靠性与低完整性风险的平衡。

yyy34的博客 191

【热门开源项目下载】房产行业小程序

【热门开源项目下载】房产行业小程序 【免费下载链接】房产行业小程序 友得云客房产小程序是一款专为房产行业打造的开源的线上营销获客小程序,功能包括:一手房、二手房、租房房源发布、二维码海报、置业顾问电子名片,适用于房产开发商、代理商、房产自媒体等行业,拥有众多成功案例。前端采用微信小程序原生开发,后端采用java开发,社区...

gitblog_01413的博客 995

SLAM Cartographer(18)后端优化问题求解器

了解经过闭环检测构建了子图与节点之间的约束之后,通过后端优化求解器进行优化求解。核心是基于Ceres库进行SPA(Sparse Pose Adjustment)的优化方法,把后端优化问题描述成为一个最小二乘的问题求解

氢键H-H 5684

一款轻量级的【一物一码】开源溯源防伪营销系统,可应用于农产品、快消品各类品牌溯源,美观大气

Ewem是国内首款基于JAVA开源的一物一码溯源防伪系统,目标是为给广大中小企业提供一套标准化、一物一码能力的基础平台,有效降低定制化开发成本。系统提供了溯源码、环节采集、流程追溯、商品防伪、窜货管理、可视化数据看板六大功能模块,帮助用户从产品制造到产品使用的全生命周期管理,可以广泛应用到生产制造、品牌溯源、农产品、移动巡检、快消品等场景,保障有二维码的地方就能用。1000+优质开源项目更新进度:229/1000。如需更多类型优质项目推荐,请在文章后留言。

295

【win10】win 10 电脑喇叭音频显示红叉的处理方法

目录 一、报错情况 二、“音频服务未运行”解决方法 三、“未插入扬声器或耳机”解决方法 一、报错情况 (1)当电脑的扬声器喇叭图标上带有红X符号,提示“音频服务未运行”时: (2)小喇叭上面有红叉,显示“未插入扬声器或耳机”时: 二、“音频服务未运行”解决方法 (1)开始菜单搜索“服务”: (2)没有启动的点击“启动”,已启动的点击“重新启动”: (3)继续,右...

顾三殇 —— 博客空间(软件测试) 17万+

simulink建模仿真实例1000例--第375例:基于Simulink进行复杂交通流的仿真建模

特点多车互动:模拟多个车辆之间的相互作用。动态变化:交通流量随时间和事件(如事故、天气变化)而变化。多样化驾驶行为:考虑不同的驾驶员行为模式(激进型、保守型等)。挑战准确性:准确地模拟各种因素对交通流的影响。实时性:处理大量车辆数据,并迅速做出反应。可扩展性:支持从简单场景到复杂城市交通网络的扩展。首先明确要模拟的任务内容。模拟不同类型的车辆(轿车、卡车、公交车等)。考虑不同驾驶员的行为模式。分析交通拥堵、事故对交通流的影响。

xiaoheshang_123的博客 204

【房产行业小程序】开源下载和安装教程

【房产行业小程序】开源下载和安装教程 【免费下载链接】房产行业小程序 友得云客房产小程序是一款专为房产行业打造的开源的线上营销获客小程序,功能包括:一手房、二手房、租房房源发布、二维码海报、置业顾问电子名片,适用于房产开发商、代理商、房产自媒体等行业,拥有众多成功案例。前端采用微信小程序原生开发,后端采用java开发,社...

gitblog_01408的博客 643

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【小红书】必看!小红书 API 接口对接全解析

本文聚焦深圳小于科技的小红书 API 接口对接服务,详细介绍其两种授权方式。链接授权通过特定链接,依据appId和可选的outerAccountId完成授权,操作简便。自定义授权接口为{host_prefix}/api/auth/xiaohongshu/qrCodeUrl,借助appId、appSecret和可选的outerAccountId进行授权,有效时间灵活可设。两种授权方式的响应数据包含url和schema,分别用于扫码授权和手机端应用打开授权。

szlessthan的博客 8362

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于JEE的银行客户关系系统的设计和实现

简单说,一个管安全规则,一个管身份凭证,组合起来为Web应用打造可靠防护。2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)8、AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。

qq_840612233的博客 630

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JAVA名片系统易卡随行系统源码支持小程序+公众号+H5

JAVA名片系统易卡随行系统源码支持小程序+公众号+H5:重塑商务社交数字新基建

2301_76386147的博客 390

开题报告 springboot和vue-天长地久婚庆网设计及其整合推广

简单说,一个管安全规则,一个管身份凭证,组合起来为Web应用打造可靠防护。2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)8、AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。

ztopmind的博客 505
上一篇: 手撕「字段自动填充」的2种方案
下一篇: 告别SQL盲猜!5种打印SQL语句的实战方案
智_永无止境
博客等级 码龄10年 803粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值