文档章节

ZXing生成二维码的工具类

尘叙缘
 尘叙缘
发布于 2016/01/18 15:54
字数 621
阅读 56
收藏 0
**********引入使用ZXing需要的jar包:core-3.1.0.jar


package check.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
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.common.BitMatrix;

/**
 * 将生成的二维码写入文件或者写入输出流的工具类
 */
public class MatrixToImageWriter 
{
	//定义黑色
	private static final int BLACK = 0xFF000000;
	
	//定义全白
	private static final int WHITE = 0xFFFFFFFF;
	
	/**
	 * 生成和text对应的二维码,并存入到filePath指定的路径文件中
	 * @param text 要生成二维码的内容文本    例如: http://www.baidu.com
	 * @param width 二维码图片的宽度  
	 * @param height 二维码图片的高度
	 * @param format  二维码图片的格式      例如: jpg,jpeg,png...
	 * @param fileName  文件名的全路径,后缀必须和format保持一致      例如:"D:\\zcl.jpg"
	 * @throws WriterException 
	 * @throws IOException 
	 */
	public static void generateBarCode2File(String text,int width,int height,String format,String fileName) 
			throws WriterException, IOException
	{
		if (!fileName.endsWith(format))
		{
			throw new RuntimeException(fileName + "文件名后缀和" + format + "不一致");
		}
		
		Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
		BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
		
		File file = new File(fileName);
		writeToFile(bitMatrix, format, file);
	}
	
	/**
	 * 生成和text对应的二维码,并用输出流输出
	 * @param text 要生成二维码的内容文本    例如: http://www.baidu.com
	 * @param width 二维码图片的宽度  
	 * @param height 二维码图片的高度
	 * @param format  二维码图片的格式      例如: jpg,jpeg,png...
	 * @param str 输出流
	 * @throws WriterException 
	 * @throws IOException 
	 */
	public static void generateBarCode2Stream(String text,int width,int height,String format,OutputStream str) 
			throws WriterException, IOException
	{
		Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
		BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
		
		writeToStream(bitMatrix,format,str);
	}
	
	/**
	 * 将二维码图片写入到对应的文件中
	 * @param matrix 二维码生成主类
	 * @param format  文件格式
	 * @param file 文件全路径名
	 * @throws IOException 
	 */
	private static void writeToFile(BitMatrix matrix,String format,File file) throws IOException
	{
		BufferedImage image = toBufferedImage(matrix);
		if (!ImageIO.write(image, format, file))
		{
			throw new IOException("Could not write an image of format " + format + " to " + file);
		}
	}
	
	/**
	 * 将二维码图案写入到输出流中
	 * @param matrix matrix 二维码生成主类
	 * @param format 文件格式
	 * @param str 构建的输出流
	 * @throws IOException 
	 */
	private static void writeToStream(BitMatrix matrix,String format,OutputStream str) throws IOException
	{
		BufferedImage image = toBufferedImage(matrix);
		if (!ImageIO.write(image, format, str));
		{
			throw new IOException("Could not write an image of format " + format + " to " + str);
		}
	}
	
	/**
	 * 
	 * 生成二维码
	 * @param matrix
	 * @return
	 */
	private static BufferedImage toBufferedImage(BitMatrix matrix)
	{
		int width = matrix.getWidth();
		int height = matrix.getHeight();
		BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		for (int x = 0; x < width; x++)
		{
			for (int y = 0; y < height; y++)
			{
				image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
			}
		}
		return image;
	}
	
}


© 著作权归作者所有

尘叙缘
粉丝 9
博文 106
码字总数 88164
作品 0
深圳
程序员
私信 提问
利用iText和zxing生成和读pdf417二维码

前面的一些博文中已经提到了zxing这个开源工具生成和读取二维码图片,仅从学习的角度来看,可以告一个段落。在实际的生产环境中,应用zxing生成和读取二维码,却存在一些问题: 使用扫描枪读...

彭苏云
2014/03/06
0
0
ZXing读写二维码,桌面和手机的不同用法

虽然ZXing是用Java实现的Barcode开源库,但是并不代表桌面上实现的Barcode应用在手机上也可以直接使用。因为Android的Java接口有很多是不同的。这里分享下Java Barcode生成和读取的不同用法。...

yushulx
2015/08/18
0
0
生成二维码的开源工具对比(附源码了呀!)

原文:生成二维码的开源工具对比(附源码了呀!) 某天发现生成二维码的工具(zxing)运行的很慢,于是乎上网上寻找生成二维码的工具,发现常见的开源工具有如下三种: Zxing(zxing.dll) Th...

杰克.陈
2018/07/03
0
0
利用zxing读写PDF417码制的二维码

项目中需要用到二维码,二维码的码制是PDF417,在做了一番研究之后发现zxing是个不错的开源工具(代码托管在google上面)。为什么选择zxing,由于其他一些工具比如barcode4j(开源,支持读,...

彭苏云
2013/12/17
0
0
zxing 如何识别反转二维码

说起二维码扫描,估计很多人用的是 zxing 吧。 然而 zxing 虽然好用,但是却有一些坑。 这边分析一下自己实际项目遇到的一个坑。 什么坑呢? 下面举个栗子你就懂了。 这边生成二维码使用的是...

AndroidTraveler
2018/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
18分钟前
0
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
42分钟前
1
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
3
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
5
0
高德API入门教程

项目需求 1、实现打开地图就能定位到中心显示标注点 2、点击标注显示保利可爱岛的详细信息 3、实现导航功能 <!doctype html><html><head> <meta charset="utf-8"> <meta http-......

我叫小糖主
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部