Java生成二维码的实例代码

使用开源的一维/二维码图形处理库zxing GitHub地址

引入依赖

<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>core</artifactId>
  <version>3.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>javase</artifactId>
  <version>3.3.0</version>
</dependency>

封装工具类

package com.app.utils;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * @title 生成二维码工具类
 * @author zch
 * @discribtion
 * @Date 2020年1月3日 下午4:26:05
 * @vision V1.0
 */
public class QRCodeUtil
{
  private static final int width = 200; // 图像宽度

  private static final int height = 200; // 图像高度

  private static final int ON_COLOR = 0xFF000001;

  private static final int OFF_COLOR = 0xFFFFFFFF;

  /**
   * @title 生成二维码图片
   * @discribtion
   * @author zch
   * @Date 2020年1月3日 下午3:27:21
   * @param width 二维码宽度,默认为200
   * @param height 二维码高度,默认为200
   * @param content 二维码内容,必填
   * @param logoPath logo图片路径,若为空则生成不带logo的二维码
   * @param imgPath 生成二维码文件夹路径
   * @param imgName 生成二维码图片名称,必填
   * @param suffix 生成二维码图片后缀类型,例如:gif,必填
   * @vision V1.0
   */
  public static boolean generateQRImage(Integer width, Integer height, String content, String logoPath, String imgPath, String imgName, String suffix)
  {
    if (content == null || imgName == null || suffix == null)
    {
      return false;
    }
    try
    {
      width = width == null ? QRCodeUtil.width : width;
      height = height == null ? QRCodeUtil.height : height;
      if (logoPath != null && !"".equals(logoPath.trim()))
      {
        QREncode(width, height, content, logoPath, imgPath, imgName, suffix);
      }
      else
      {
        QREncode(width, height, content, imgPath, imgName, suffix);
      }
      return true;
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return false;
    }
  }

  /**
   * @title 生成二维码
   * @discribtion
   * @author zch
   * @Date 2020年1月3日 下午3:27:21
   * @vision V1.0
   */
  private static void QREncode(int width, int height, String content, String imgPath, String imgName, String suffix)
    throws Exception
  {
    File filePath = new File(imgPath);
    if (!filePath.exists())
    {
      filePath.mkdirs();
    }
    File imageFile = new File(imgPath, imgName);
    Map<EncodeHintType, Object> hints = new HashMap<>();
    // 内容编码格式
    hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    // 指定纠错等级
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
    // 设置二维码边的空度,非负数
    hints.put(EncodeHintType.MARGIN, 1);
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
    MatrixToImageWriter.writeToPath(bitMatrix, suffix, imageFile.toPath());// 输出原图片
  }

  /**
   * @title 生成带logo的二维码
   * @discribtion
   * @author zch
   * @Date 2020年1月3日 下午3:27:21
   * @vision V1.0
   */
  private static void QREncode(int width, int height, String content, String logoPath, String imgPath, String imgName, String suffix)
    throws Exception
  {
    File filePath = new File(imgPath);
    if (!filePath.exists())
    {
      filePath.mkdirs();
    }
    File imageFile = new File(imgPath, imgName);
    Map<EncodeHintType, Object> hints = new HashMap<>();
    // 内容编码格式
    hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    // 指定纠错等级
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
    // 设置二维码边的空度,非负数
    hints.put(EncodeHintType.MARGIN, 1);
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
    MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(ON_COLOR, OFF_COLOR);
    BufferedImage bufferedImage = LogoMatrix(MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig), new File(logoPath));
    ImageIO.write(bufferedImage, suffix, imageFile);// 输出带logo图片
  }

  /**
   * @title 二维码图片添加logo
   * @discribtion
   * @author zch
   * @Date 2020年1月3日 下午3:27:21
   * @param matrixImage 源二维码图片
   * @param logoFile logo图片
   * @vision V1.0
   */
  private static BufferedImage LogoMatrix(BufferedImage matrixImage, File logoFile)
    throws IOException
  {
    // 读取二维码图片,并构建绘图对象
    Graphics2D gs = matrixImage.createGraphics();
    int matrixWidth = matrixImage.getWidth();
    int matrixHeigh = matrixImage.getHeight();
    int ratioWidth = matrixWidth * 2 / 10;
    int ratioHeight = matrixHeigh * 2 / 10;
    // 读取Logo图片
    BufferedImage logo = ImageIO.read(logoFile);
    int logoWidth = logo.getWidth(null) > ratioWidth ? ratioWidth : logo.getWidth(null);
    int logoHeight = logo.getHeight(null) > ratioHeight ? ratioHeight : logo.getHeight(null);
    int x = (matrixWidth - logoWidth) / 2;
    int y = (matrixHeigh - logoHeight) / 2;

    // 绘制
    gs.drawImage(logo, x, y, logoWidth, logoHeight, null);
    gs.setColor(Color.BLACK);
    gs.setBackground(Color.WHITE);

    gs.dispose();
    matrixImage.flush();
    return matrixImage;
  }
}

测试生成二维码

QRCodeUtil.generateQRImage(null, null, "https://blog.csdn.net/qq_34928194", null, "E:/", "test.gif", "gif");

以上就是Java生成二维码的实例代码的详细内容,更多关于Java生成二维码的资料请关注我们其它相关文章!

(0)

相关推荐

  • java实现二维码扫码授权登陆

    假设现在有2个设备,A设备需要扫码授权登陆,B设备是已经登陆了的设备.然后实现如下: 一.A设备生成生成二维码: A设备向服务器请求getLoginCode接口,这个接口根据请求的sessionId进行base64或其他加密方式进行加密,然后以此作为二维码的值,并将这个loginCode写到redis里,设置5分钟过期.然后将这个loginCode返回给A设备,A设备以此值来生成登陆的二维码. 二.B设备扫码授权 B设备来扫A设备的二维码的时候,携带二维码的值,请求授权登陆的接口scanConf

  • Java实现微信公众号获取临时二维码功能示例

    本文实例讲述了Java实现微信公众号获取临时二维码功能.分享给大家供大家参考,具体如下: 我们做微信公众号开发时为了推广,可能需要服务端去生成公众号的临时二维码,然后再进行一定的图片合成操作,制作一张漂亮的推广海报.别人扫一下二维码进入关注公众号界面,点击关注我们可以拿到二维码里面的信息官网地址 记录一下获取临时二维码操作过程. 1.获取access_token 上一篇文章写了 就不赘述了: 2.根据access_token获取二维码ticket,获取到了二维码ticket就基本山是成功了: 3

  • Java生成中间logo的二维码的示例代码

    最近有负责微信开发,对于微信开发的项目,肯定少不了二维码啦,正好有个这样的需求,这对不同的商品生成一个二维码,扫码即刻下单.博主就弄了一个二维码生成的工具类. 弄出来之后,产品经理又说了,中间放上公司的logo是不是好一点?加上吧, 加上公司logo之后,产品经理想了想,每个商品都有个二维码,销售人员有很多个商品二维码,群发给用户,在qq群上,微信群上,怎么知道哪个二维码对应哪个商品的呢?于是决定要加上商品名称.最后商品二维码就成了下面这个模样了(当然啦,这里面的logo并不是博主现职公司的).

  • Java创建、识别条形码和二维码方法示例

    前言 条形码(Barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常用于标示物品的生产国.制造厂家.商品名称.生产日期.图书分类号.邮件起止地点.类别.日期等信息,广泛应用于各个领域.常见的包括一维条码(条码).二维条码(二维码).彩色条码,在具体码制上可分为多种不同类型的条码,如UPC(统一产品代码,只能以数字表示).Code 3(能表示字母.数字和其它一些符号共43个字符).Code 128(表示高密度数据,字符串可变长,符号内含校验码).Co

  • Java实现的生成二维码和解析二维码URL操作示例

    本文实例讲述了Java实现的生成二维码和解析二维码URL操作.分享给大家供大家参考,具体如下: 二维码依赖jar包,zxing <!-- 二维码依赖 start --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.0.0</version> </dependency&

  • 通过java生成读取二维码详解

    前言 在开始之前,我们需要先引入二维码生成和读取的jar包,这里我用的是qrcodejar 新建一个Java工程,在工程中添加一个lib目录,把两个Jar包放到lib目录下,不要忘了add as libiary 在build.gradle中添加配置 compile fileTree(dir:'lib',include:['*.jar']) (这里我用的是gradle) 准备工作结束,马上开始 生成二维码 public class QRcodeTest { public static void m

  • 扫二维码自动跳转【java】详解

    这个帖子网上很多了,但是都是讲理论知识,我呢,喜欢搞代码.既然搞完了,就贴出来备忘一下,也可以分享一下. 重复理论步骤: 1.进入网站-生成UUID 2.跳转到二维码页面(二维码包含UUID) 3.二维码页面写一个js,自动请求服务器查询二维码是否被扫 4.服务器收到请求,查询,如果还没被扫,进入等待,先不返回结果 5.一旦被扫,立即返回结果,页面js收到响应,做后续处理 OK,步骤是这样的没错,不过有一点缺点,步骤3中如果请求超时怎么办. 这个微信web登录有示例,服务器被请求后,持续等待25

  • Java将微信和支付宝支付的个二维码合二为一的方法

    因公司需要将支付宝和微信的二维码合成一个,不管用户用支付宝扫还是微信扫都能打开对应的支付页面,在网上找了一些文章,很感谢各位大神的经验,我也记录下我是如何将两个二维码合二为一的~. 原理:支付宝或微信生成的二维码中本质都内嵌了一个url,在扫码时实际是定向去访问二维码中内嵌的url,这样我就可以将这个url指定到我的一个控制器,在控制器中判断是微信还是支付宝软件扫的,然后去唤醒各自的支付即可. 1.首先生成二维码: folderName:存储二维码图片的文件夹名 imageName:二维码图片名

  • 微信小程序实现获取小程序码和二维码java接口开发

    前言:目前小程序推出了自己的识别码,小程序码,这个圆形的码看起来比二维码好看.本文总结微信小程序的获取小程序码和二维码并生成二维码图片的接口开发.主要内容摘抄自微信小程序的API文档,java接口开发是自己总结开发. 微信小程序API文档:获取二维码 一.简介 通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面.目前微信支持两种二维码,小程序码(左),小程序二维码(右),如下所示: 二.获取小程序码 目前有两个接口可以生成小程序码,开发者可以根据自己的需要选择合

  • java实现批量生成二维码

    本文实例为大家分享了java实现批量生成二维码的具体代码,供大家参考,具体内容如下 package com.youge.test; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; im

  • java 生成二维码实例

    最近有点时间想学点东西,想做个简单的系统,现在登录的时候使用扫描二维码获取验证码登录,于是就有了下面的一些代码 首先要导入pom依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> 这个是goole提供的一些包 第一个类是go

  • JAVA实现二维码生成加背景图代码实例

    这篇文章主要介绍了JAVA实现二维码生成加背景图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 pom.xml依赖 <!-- 二维码生成 --> <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>com.google.zxing</groupId> <art

  • java实现电脑端扫描二维码

    本文实例为大家分享了java实现电脑端扫描二维码的具体代码,供大家参考,具体内容如下 说明:js调去电脑摄像头拍照,然后获取图片base64位编码,再将base64为编码转为bolb,通过定时异步上传到后台,在后台对图片文件进行解码,返回解码结果到页面,然后页面重新加载结果(url) 第一种方式引入js <script type="text/javascript" src="${basePath}js/jquery-1.9.min.js"></sc

  • java使用电脑摄像头识别二维码

    本文实例为大家分享了java使用电脑摄像头识别二维码的具体代码,供大家参考,具体内容如下 要想摄像头识别二维码,需要两个基本功能: 1.从摄像头获取图像,2.根据图片解析出二维码信息. 在上一篇java摄像头截图已经实现了摄像头截图,只要再加上zxing(或其它能从图片中解析二维码的组件),就能从图像中解析出二维码,实现代码如下: package com.pengo.capture; import javax.swing.JFrame; import java.awt.BorderLayout;

随机推荐