使用zxing来生成二维码

二维码已经成为了现代生活中不可或缺的一部分,无论是商业还是个人使用,二维码都有着广泛的应用。而在二维码的生成过程中,zxing是一款非常优秀的开源库,它提供了一系列的API,可以帮助我们快速、方便地生成二维码。接下来,我们就来介绍一下如何使用zxing来生成二维码。

一、准备工作

在使用zxing生成二维码之前,我们需要先下载zxing的jar包,并将其导入到项目中。在此基础上,我们还需要导入一些其他的相关依赖,例如Google Guava和Apache Commons IO等。

二、生成二维码

在zxing中,生成二维码的核心类是QRCodeWriter,我们可以通过以下代码来生成一个简单的二维码:

public static void generateQRCode(String content, int width, int height, String filePath) throws Exception {

Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();

hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);

Path path = FileSystems.getDefault().getPath(filePath);

MatrixToImageWriter.writeToPath(bitMatrix, "png", path);

}

在上述代码中,我们首先创建了一个Hashtable对象,用于存储二维码的一些参数。其中,EncodeHintType.CHARACTER_SET表示使用utf-8编码,width和height分别表示二维码的宽度和高度。接着,我们调用QRCodeWriter的encode方法来生成二维码的BitMatrix对象。最后,我们将BitMatrix对象写入到指定的文件路径中。

三、生成带有Logo的二维码

除了普通的二维码之外,我们还可以生成带有Logo的二维码。在zxing中,生成带有Logo的二维码的核心类是MatrixToImageConfig,我们可以通过以下代码来生成一个带有Logo的二维码:

public static void generateQRCodeWithLogo(String content, int width, int height, String logoPath, String filePath) throws Exception {

Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();

hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);

BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix, getMatrixToImageConfig());

Graphics2D g = image.createGraphics();

int logoWidth = image.getWidth() / 5;

int logoHeight = image.getHeight() / 5;

int logoX = (image.getWidth() - logoWidth) / 2;

int logoY = (image.getHeight() - logoHeight) / 2;

BufferedImage logo = ImageIO.read(new File(logoPath));

g.drawImage(logo, logoX, logoY, logoWidth, logoHeight, null);

g.dispose();

ImageIO.write(image, "png", new File(filePath));

}

private static MatrixToImageConfig getMatrixToImageConfig() {

return new MatrixToImageConfig(0xFF000001, 0xFFFFFFFF);

}

在上述代码中,我们首先生成了一个普通的二维码BitMatrix对象。接着,我们将BitMatrix对象转换为BufferedImage对象,并获取Graphics2D对象。然后,我们计算出Logo的宽度、高度、X轴和Y轴位置,并读取Logo图片。最后,我们将Logo绘制到BufferedImage对象上,并将其写入到指定的文件路径中。

总结

zxing是一款非常优秀的开源库,可以帮助我们快速、方便地生成二维码。在使用zxing生成二维码时,我们需要先准备好相关的依赖和jar包,并使用QRCodeWriter类来生成普通的二维码。如果需要生成带有Logo的二维码,我们可以使用MatrixToImageConfig类来实现。无论是生成普通的二维码还是带有Logo的二维码,zxing都是一个非常实用的工具。

使用zxing来生成二维码的更多相关文章

  1. C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)

    1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...

  2. 基于Asp.Net Core,利用ZXing来生成二维码的一般流程

    本文主要介绍如何在.net环境下,基于Asp.Net Core,利用ZXing来生成二维码的一般操作.对二维码工作原理了解,详情见:https://blog.csdn.net/weixin_36191 ...

  3. 【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)

    有任何疑问请去我的新博客提出 https://blog.clso.fun/posts/2019-03-03/vb-net-zxing-net-qr-maker.html ZXing .NET 的项目主 ...

  4. Java中使用google.zxing快捷生成二维码(附工具类源码)

    移动互联网时代,基于手机端的各种活动扫码和收付款码层出不穷:那我们如何在Java中生成自己想要的二维码呢?下面就来讲讲在Java开发中使用 google.zxing 生成二维码. 一般情况下,Java ...

  5. 使用python调用zxing库生成二维码图片

    (1)     安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...

  6. ZXing.dll 生成二维码 C# winform net4.5

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. 利用Spring Boot+zxing,生成二维码还能这么简单

    在网站开发中,经常会遇到要生成二维码的情况,比如要使用微信支付.网页登录等,本文分享一个Spring Boot生成二维码的例子,这里用到了google的zxing工具类. 本文目录 一.二维码简介二. ...

  8. C#MVC用ZXing.Net生成二维码/条形码

    开篇:zxing.net是.net平台下编解条形码和二维码的工具. 首先创建新项目 选择MVC模板  添加一个控制器  在项目引用中的引用ZXing 进行联网下载 控制器需要引用 后台控制器   pu ...

  9. com.google.zxing:core 生成二维码的简单使用

    String content = ""; int size = 240; Hashtable<EncodeHintType, String> hints = new H ...

  10. 高校手机签到系统——zxing.net生成二维码(补充)

    高校手机签到系统——第一部分Authority权限系统(上) 高校手机签到系统——第一部分Authority权限系统(下) 高校手机签到系统——手机客户端 关于zxing.net的使用网上已有很多说明 ...

随机推荐

  1. 视觉slam十四讲 ch3 三维刚体运动

    视觉slam十四讲 ---CH3 三维刚体运动 三维刚体运动,即三维空间下的刚体的运动.刚体,是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体.在运动过程中,机器人或者飞机和 ...

  2. DELPHI IDE 代码智能提示

  3. 《ASP.ENT Core 与 RESTful API 开发实战》-- (第5章)-- 读书笔记(中)

    第 5 章 使用 Entity Framework Core 5.3 重构仓储类 创建一个通用仓储接口 namespace Library.API.Services { public interfac ...

  4. SpringBoot中单元测试如何对包含AopContext.currentProxy()的方法进行测试

    今天在工作中遇到一个问题,一个Service类中有一个方法,其中使用了 AopContext.currentProxy() 去访问自身的函数,例如 int result = ((OrderServic ...

  5. CF-926(已更新:B)

    CF-926 两点睡,七点起,阎王夸我好身体-- 主要这场实在是难绷,两个小时都在C题上吊死了,也不是没想过跳题,只是后面的题我更是一点思路都没有-^- "就喜欢这种被揭穿的感觉,爽!&qu ...

  6. nginx 配置mp4文件播放

    nginx 配置mp4文件播放 ​ 由于工作需要一个离线的视频播放地址,就想简单一点直接把视频文件放到nginx里面实现视频播放,但是把mp4文件放上去之后地址栏输入地址直接就是下载文件,这跟我想象的 ...

  7. ES6学习 第六章 数值的扩展

    前言 本章介绍数值的扩展.新增了很多方法,有些不常用的方法了解即可. 本章原文链接:数值的扩展 进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. ...

  8. NVME(学习笔记一)—概述

    NVMe概述 NVMe是一个针对基于PCIe的固态硬盘的高性能的.可扩展的主机控制器接口. NVMe的显著特征是提供多个队列来处理I/O命令.单个NVMe设备支持多达64K个I/O 队列,每个I/O队 ...

  9. 基于 junit5 实现 junitperf 源码分析

    前言 上一节介绍了基于 junit4 实现 junitperf,但是可以发现定义变量的方式依然不够优雅. 那可以让用户使用起来更加自然一些吗? 有的,junit5 为我们带来了更加强大的功能. 拓展阅 ...

  10. java interface 介绍

    interface类似于class,只不过interface里的所有方法都是abstract抽象的,当一个非抽象的class实现(implements)一个接口interface时,必须实现接口中所有 ...