`

使用Zxing生成二维码,以及在生成的二维码中添加logo

 
阅读更多

     最近研究了Zxing的源码,以及它的一些常用的用法,感触也是很深,也提高了不少,网上也找了各种写法,要真正的理解这一整套东西还是要花费些经历的,涉及的知识面还是有一些的,下面就上一下我简单封装的源码。以方便大家做参考,封装的不完善,只是简单的写了个,大家可以自己进行封装.....

1. 下载Zxing所需要的依赖包:core-2.2.jar、javase-2.2.jar ,因为只使用到了javase-2.2 Jar包的部分内容,可以将javase进行简化下

ZxingDemoTest.java:  测试入口类

 

public static void main(String[] args) {
		try {
			int width = 200;
			int height = 200;
			String content = "http://www.taobao.com";
			BitMatrix matrix = MatrixToImageWriterEx.createQRCode(content, width, height);
			MatrixToLogoImageConfig logoConfig = new MatrixToLogoImageConfig(Color.BLUE, 4);
			MatrixToImageWriterEx.writeToFile(matrix, "jpg", "C:/img/imgQRCode.jpg", "C:/img/logo.jpg", logoConfig);
			System.out.println("生成二维码结束!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

 

 

MatrixToImageWriterEx.java : 生成二维码logo扩展类,此类是在zxing的基础上进行扩展的,用于在二维码上定制自己的logo

package com.demo.zxing;

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();
		}
	}
	
}

 

MatrixToLogoImageConfig.java : 定制logo属性类

 

package com.demo.zxing;

import java.awt.Color;

public class MatrixToLogoImageConfig {
	//logo默认边框颜色
	public static final Color DEFAULT_BORDERCOLOR = Color.RED;
	//logo默认边框宽度
	public static final int DEFAULT_BORDER = 2;
	//logo大小默认为照片的1/5
	public static final int DEFAULT_LOGOPART = 5;

	private final int border = DEFAULT_BORDER;
	private final Color borderColor;
	private final int logoPart;
	
	/**
	 * Creates a default config with on color {@link #BLACK} and off color
	 * {@link #WHITE}, generating normal black-on-white barcodes.
	 */
	public MatrixToLogoImageConfig() {
		this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);
	}

	
	public MatrixToLogoImageConfig(Color borderColor, int logoPart) {
		this.borderColor = borderColor;
		this.logoPart = logoPart;
	}


	public Color getBorderColor() {
		return borderColor;
	}


	public int getBorder() {
		return border;
	}


	public int getLogoPart() {
		return logoPart;
	}
}

 

 

这基本就是源码了,这里就不贴项目源码了,中国的程序员拿来主义太严重.... 其实还有一些其他的扩展功能.... 这里就不多说了。

分享到:
评论

相关推荐

    zxing生成二维码,图片Base64编码

    在Java环境下,使用ZXing生成二维码的步骤如下: 1. 引入ZXing库:在项目中添加ZXing的依赖,通常通过Maven或Gradle来管理。对于Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;com.google.zxing&lt;/...

    使用Java zxing开发的二维码 带logo彩色二维码

    2. **添加logo**: 在生成二维码后,我们需要在二维码中心位置插入logo。首先,对logo进行适当的缩放,保持其与二维码尺寸的比例,防止过大影响二维码识别。可以使用Java的`BufferedImage`类进行图片处理,包括缩放、...

    使用google-zxing 生成二维码的简单小实例

    这个简单的例子展示了如何使用ZXing库在Java环境中生成二维码。`zxingQrcode`压缩包中的文件可能包含了这个示例项目的源代码和其他必要的资源。如果你想要进一步定制二维码,例如调整尺寸、颜色或者添加logo,可以...

    spring boot用zxing生成二维码,支持logo.qrcode-master.zip

    在本文中,我们将深入探讨如何在Spring Boot项目中利用ZXing库生成二维码并支持自定义logo。ZXing,全称为“Zebra Crossing”,是一个开源的、多格式的1D/2D条码图像处理库,它能读取、写入多种条码格式,包括二维码...

    ireport生成一维码和google zxing二维码

    2. 使用自定义函数:由于iReport本身不直接支持ZXing,我们可能需要编写Java代码片段(在iReport中称为“自定义函数”或“脚本”),利用ZXing API生成二维码图像。 3. 插入图像组件:在报表设计中,添加一个图像...

    google.zxing二维码带logo生成工具

    在使用`google.zxing`生成二维码时,我们首先需要了解其基本流程: 1. **生成二维码**:通过调用ZXing提供的API,传入要编码的数据和一些配置参数,如纠错级别(L, M, Q, H),可以生成二维码图像。纠错级别越高,...

    使用zxing开发的二维码/条形码/带logo彩色二维码例子

    在本项目中,我们关注的是ZXing在生成二维码和条形码方面的应用。首先,我们可以使用ZXing库的API生成标准的黑白二维码和条形码,这些API通常包括设置数据内容、指定编码格式、调整尺寸等功能。生成过程涉及将输入的...

    ZXing生成可选logo和文字的二维码图片工具类ZXingCodeUtils

    - 二维码生成过程中,ZXing首先会将输入的数据转化为二进制数据流,然后根据二维码的编码规则(如错误校验位、定位图案等)进行编码和排列。 - 接着,这些二进制数据会被转化为黑白像素,形成二维码的图像。如果...

    zxing彩色二维码工具类

    该工具类目前比较简单,只是实现了普通二维码、logo二维码、彩色二维码和二维码条形码解析几个功能。 根据此工具类可扩展生成LOGO+文字的二维码,暂时不需要没有封装。

    zxing 生成二维码名片.rar

    三、ZXing生成二维码名片步骤 1. 引入ZXing库:首先,你需要在项目中引入ZXing库。对于Java项目,可以通过Maven或Gradle添加依赖;对于Android项目,可以直接在build.gradle文件中添加ZXing的aar包。 2. 创建二维码...

    C# ZXing.Net 生成二维码支持中文Demo

    在IT行业中,二维码作为一种高效的信息编码方式,被广泛应用于各种场景。C#作为.NET框架的主要编程语言,同样可以...在实际项目中,可以根据需求进行扩展,如添加自定义的样式、颜色、logo等元素,使二维码更具个性化。

    java 生成二维码 ZXing

    `ZXImg.java`可能是提供了一个具体的实现案例,你可以打开这个文件查看具体的代码实现,以了解如何在实际项目中使用ZXing生成二维码。这个文件可能包含了一些自定义的配置,比如二维码的尺寸、颜色、边距等。 生成...

    Zxing二维码生成

    在本文中,我们将探讨“Zxing二维码生成”插件,这是一个经过验证的、高效且功能丰富的二维码生成工具。 Zxing,全称“ZXing (Zebra Crossing)”,是一个开源的、多平台的条码阅读和生成库。这个项目最初由Google...

    java扩展zxing自定义生成二维码源码(美化、艺术)

    看着网上好看的二维码,也想着自己实现一个,经过3周的理论加开发时间,终于实现,详细介绍请看 https://blog.csdn.net/u011837804/article/details/129229973,本源码基于zxing组件扩展实现了草料二维码99%的功能。...

    com.google.zxing 生成二维码工具

    三、使用ZXing生成二维码 1. **Java版**:在Java环境中,可以使用`com.google.zxing.client.j2se.MatrixToImageWriter`类将数据编码为图像。首先,创建一个`BitMatrix`对象来存储编码后的数据,然后调用`...

    zxing生成、解析二维码

    在本文中,我们将深入探讨如何使用ZXing来生成和解析二维码,以及如何利用QRcode.java类创建二维码名片。 1. **生成二维码** - **ZXing API介绍**:ZXing提供了Java API,可以方便地集成到各种项目中。主要的类有`...

    google.zxing自定义生成微信二维码.rar

    在实际开发中,只需在`pom.xml`中添加相应的依赖,Maven就会自动下载并将其引入到项目中。 总的来说,这个项目展示了如何利用`google.zxing`库来实现微信二维码的自定义生成。开发者可以根据需求调整二维码的样式,...

    java用zxing生成二维码

    在这个场景中,我们将关注如何在Java环境下利用ZXing库来生成二维码。下面将详细介绍这个过程。 首先,我们需要在Java项目中引入ZXing库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...

    zxing 生成二维码.zip

    主要是使用google的zxing 生成二维码,可设置logo、二维码前景色/后景色、白边大小、二维码大小 详情:http://blog.csdn.net/rongku/article/details/51872156

Global site tag (gtag.js) - Google Analytics