Java二维码生成代码

添加时间:2019-11-11 21:43:03

来源:

浏览:

首先引入Jar包:


<dependency>

    <groupId>com.google.zxing</groupId>

    <artifactId>core</artifactId>

    <version>3.2.1</version>

</dependency>

<dependency>

    <groupId>com.google.zxing</groupId>

    <artifactId>javase</artifactId>

    <version>3.2.1</version>

</dependency>

然后开始撸代码


package com.zxtg.zshop.common;

 

import java.awt.BasicStroke;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.Hashtable;

 

import javax.imageio.ImageIO;

 

import com.google.zxing.BarcodeFormat;

import com.google.zxing.EncodeHintType;

import com.google.zxing.MultiFormatWriter;

import com.google.zxing.WriterException;

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;

 

public class MatrixToImageWriterEx {

private static final MatrixToLogoImageConfig DEFAULT_CONFIG = new MatrixToLogoImageConfig();

/**

* 根据内容生成二维码数据

* @param content 二维码文字内容[为了信息安全性,一般都要先进行数据加密]

* @param width 二维码照片宽度

* @param height 二维码照片高度

* @return

*/

public static BitMatrix createQRCode(String content, int width, int height){

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

//设置字符编码

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

        // 指定纠错等级

hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

        BitMatrix matrix = null;  

        try {  

            matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); 

        } catch (WriterException e) {  

            e.printStackTrace();  

        }

        return matrix;

}

/**

* 写入二维码、以及将照片logo写入二维码中

* @param matrix 要写入的二维码

* @param format 二维码照片格式

* @param imagePath 二维码照片保存路径

* @param logoPath logo路径

* @throws IOException

*/

public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath) throws IOException {

MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig());

//添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象

BufferedImage img = ImageIO.read(new File(imagePath));

MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, DEFAULT_CONFIG);

}

/**

* 写入二维码、以及将照片logo写入二维码中

* @param matrix 要写入的二维码

* @param format 二维码照片格式

* @param imagePath 二维码照片保存路径

* @param logoPath logo路径

* @param logoConfig logo配置对象

* @throws IOException

*/

public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) throws IOException {

MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig());

//添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象

BufferedImage img = ImageIO.read(new File(imagePath));

MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, logoConfig);

}

 

/**

* 将照片logo添加到二维码中间

* @param image 生成的二维码照片对象

* @param imagePath 照片保存路径

* @param logoPath logo照片路径

* @param formate 照片格式

*/

public static void overlapImage(BufferedImage image, String formate, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) {

try {

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

Graphics2D g = image.createGraphics();

//考虑到logo照片贴到二维码中,建议大小不要超过二维码的1/5;

int width = image.getWidth() / logoConfig.getLogoPart();

int height = image.getHeight() / logoConfig.getLogoPart();

//logo起始位置,此目的是为logo居中显示

int x = (image.getWidth() - width) / 2;

int y = (image.getHeight() - height) / 2;

//绘制图

g.drawImage(logo, x, y, width, height, null);

//给logo画边框

//构造一个具有指定线条宽度以及 cap 和 join 风格的默认值的实心 BasicStroke

g.setStroke(new BasicStroke(logoConfig.getBorder()));

g.setColor(logoConfig.getBorderColor());

g.drawRect(x, y, width, height);

g.dispose();

//写入logo照片到二维码

ImageIO.write(image, formate, new File(imagePath));

} catch (Exception e) {

e.printStackTrace();

}

}

}

最后我们调用QrcodeGenerator.encode方法一下:


package com.zxtg.zshop.util;

 

import java.awt.Color;

import java.awt.image.BufferedImage;

 

import com.google.zxing.client.j2se.MatrixToImageWriter;

import com.google.zxing.common.BitMatrix;

import com.zxtg.zshop.common.MatrixToImageWriterEx;

 

public class QrcodeGenerator {

public static BufferedImage encode(String content, int width, int height) {

try {

BitMatrix matrix = MatrixToImageWriterEx.createQRCode(content, width, height);

BufferedImage image = MatrixToImageWriter.toBufferedImage(matrix);

return image;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

 

————————————————



noet 自定义字段

相关内容

——
11

2019-11

Java二维码生成代码

首先引入Jar包:dependency groupIdcom.google.zxing/groupId artifactIdcore/artifactId version3.2.1/version/dependencydependency groupIdcom.googl…… [了解更多]

 
上海骁唐智能科技有限公司是一家专业从事条码扫描器、条码打印机、标签耗材、数据采集等智能识别应用系统的高科技条码物联网企业。提供Datalogic得利捷、Mindeo民德、Newland新大陆、Honeywell霍尼韦尔等条码扫描器,数据采集器,条码打印机等条码设备及条码扫描器软件下载、条码打印机维修、条码管理系统。骁唐专注于新零售和智能制造等的发展,有自己独立的扫描器品牌同时也是众多国际知名自动识别设备厂商的战略合作伙伴。

地 址:中国(上海)自由贸易试验区临港新片区平港路883-885号1幢

邮政编码:201411

电 话:13761963296

邮 箱:847098433@qq.com

投诉邮 箱:info@xtvu.com