`
xurichusheng
  • 浏览: 336040 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用google的zxing制作二维码

阅读更多

一、zxing 的 jar 包及源码下载

   http://code.google.com/p/zxing/downloads/list

 

   本示例选择的是ZXing-2.0.zip

 

二、将下载的 ZXing-2.0.zip 解压,取出 core 及 javase ,将 core 包下的

   com/google/zxing/qrcode/encoder/Encoder.java  的

   static final String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";

   改成

   static final String DEFAULT_BYTE_MODE_ENCODING = "utf-8";

   以支持中文

 

三、生成代码

 

     1. GenerateQRCode.java

        其中的 DateUtils.getStringDate1() 是一个时间格式的String类型(yyyyMMddHH:mm:ss)

 

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import org.apache.log4j.Logger;

import cn.com.do1.component.util.DateUtils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

/**
 * @ClassName: GenerateQRCode
 * @Description: 生成二维码
 * @author 
 * @company 
 * @date 2012-11-9
 * @version V1.0
 */
public final class GenerateQRCode {

	private static final Logger log = Logger.getLogger(GenerateQRCode.class);

	private static final GenerateQRCode instance = new GenerateQRCode();

	private GenerateQRCode() {
	}

	public static GenerateQRCode getInstance() {
		return instance;
	}

	private static final int BLACK = 0xff000000;
	private static final int WHITE = 0xFFFFFFFF;

	/**
	 * @Title: generate
	 * @Description: 生成二维码
	 * @param assetsName
	 *            二维码图片名称
	 * @param params
	 *            二维码信息
	 * @param width
	 *            生成的图片的宽
	 * @param height
	 *            生成的图片的高
	 * @param path
	 *            二维码图片存放目录
	 * @throws Exception
	 * @return String 二维码图片名称
	 * @author 
	 * @date 2012-11-9
	 */
	public String generate(String assetsName, String params, String path,
			int width, int height) throws Exception {

		log.info("GenerateQRCode-->start to generate qrcode.");
		log.info("the qrcode's save path is:" + path);

		File file = new File(path);

		if (!file.exists()) {
			file.mkdirs();
		}

		// 二维码图片名称
		String fileName = assetsName.concat("_")
				.concat(DateUtils.getStringDate1()).concat(".png");

		// 二维码图片存放路径
		path = path.concat(fileName);

		log.info("the qrcode's path is:" + path);

		file = new File(path);

		if (!file.exists()) {
			file.createNewFile();
		}

		BitMatrix bitMatrix = new MultiFormatWriter().encode(params,
				BarcodeFormat.QR_CODE, width, height);

		writeToFile(bitMatrix, "png", file);

		log.info("GenerateQRCode-->end to generate qrcode.");

		return fileName;
	}

	public static void writeToFile(BitMatrix matrix, String format, File file)
			throws Exception {

		BufferedImage image = toBufferedImage(matrix);

		ImageIO.write(image, format, file);

	}

	public static BufferedImage toBufferedImage(BitMatrix matrix) {

		int width = matrix.getWidth();

		int height = matrix.getHeight();

		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_ARGB);

		for (int x = 0; x < width; x++) {

			for (int y = 0; y < height; y++) {

				image.setRGB(x, y, matrix.get(x, y) == true ? BLACK : WHITE);

			}

		}

		return image;

	}
}

 

四、调用

    其中,Constants.CHANGE_LINE 表示换行符 \r\n

public void encode() {
		// 二维码内容
		StringBuffer params = new StringBuffer();
		
		params.append("资产名称:").append("你好").append(Constants.CHANGE_LINE);
		params.append("资产编号:").append("adfadf").append(Constants.CHANGE_LINE);
		params.append("资产类型:").append("网络设备").append(Constants.CHANGE_LINE);
		params.append("所属部门:").append("综合部").append(Constants.CHANGE_LINE);
		params.append("制码时间:").append(DateUtils.getStringDate()).append(Constants.CHANGE_LINE);
		params.append("审核人:").append("管理员");
                // 二维码图片生成路径
		String path = "D:\\Project\\foshan_tobacco\\code\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\fsycsms\\images\\qrcodeImg\\";
		try {
			String imgPath = GenerateQRCode.getInstance().generate(
					"你好",params.toString(), path, 200, 200);
			
			System.out.println(imgPath);

			System.out.println("生成二维码成功");

		} catch (WriterException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

五、附件

     具体的代码请查看附件 fsycsms-qrcode.rar

     附件的工程是一个maven工程。

     请导入 eclipse 中,eclipse 我使用的版本是 eclipse-jee-indigo-SR2-win32    (3.7的)

     工程中的代码结构如下:

   

 

其中的源包(Source Folder) src/qrcode/core 和 src/qrcode/javase ,就是在上面第2步中取出的包

  • 大小: 26 KB
分享到:
评论
4 楼 xurichusheng 2014-02-19  
814687491 写道
测试了一下,无法换行!


你可以自定义自己的换行符的
3 楼 xurichusheng 2014-02-19  
814687491 写道
Constants.CHANGE_LINE  Constants类是哪个包下的?


Constants 这个是自定义的类
2 楼 814687491 2014-01-22  
测试了一下,无法换行!
1 楼 814687491 2014-01-22  
Constants.CHANGE_LINE  Constants类是哪个包下的?

相关推荐

    Google ZXing制作的条形码、二维码的生成、扫描Demo 源码.zip

    Google ZXing制作的条形码、二维码的生成、扫描Demo 源码,可以做为你的学习设计参考。

    利用zxing制作解码二维码

    利用google的开源工具zxing做的二维码解码和生成小工具,附带了非常简易的图形界面。里面的core.jar和javase.jar是需要用到的zxing里面的,务必导入。

    Android 仿微信二维码名片制作,生成二维码,扫码生成名片表单信息

    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果,Android 仿微信二维码名片制作,生成二维码,扫码生成名片表单信息,这里是实例代码,项目详情...

    条形码、二维码扫描、生成Demo 完整源码

    使用Google ZXing开源项目制作的条形码、二维码的生成、扫描Demo

    c#简易二维码制作工具

    全球现有的二维码多达200种以上,其中常见的技术标准有PDF417(美系标准),QRCode(日系标准),Code49,Code16K,CodeOne,DM(韩系标准),GM(中国...该工具借助google的开源项目zxing来实现1D/2D的编码和解码。

    ZXing2.3.0 core.jar

    Google ZXing开源项目可以制作和扫描解析条形码、二维码 ZXing2.3.0的核心core包

    zxing3.1 jar

    zxing 是一款谷歌上开源项目,针对安卓扫描,生成二维码 的项目。 这个是工具包,网上有相关教程,可制作或扫描二维码 的安卓APP

    Android开源一维二维码扫描制作工具

    可以使用文字、通讯录、应用软件、书签,制作、共享、保存二维码 典型用途: 名片交换:用这软件生成某联系人的二维码显示在屏幕(或者发送邮件、彩信),让对方扫描即可添加到通讯录; 文字、网址交换; 根据条码...

    月下载量上千次Android实现二维码生成器app源码分享

    首先介绍这款应用:APP是一款二维码生成器,虽然如何制作二维码教程网上有很多,我这里再唠叨一下并把我的所有功能模块代码都分享出来。 在这里我们需要一个辅助类RGBLuminanceSource,这个类Google也提供了,我们...

    FHS_Band_Android

    ###概述 概括 去做 ###概括 FHS 乐队 Android 应用程序的代码。 来源由和维护。 ... 版权所有。... 制作二维码阅读器页面 查找开源 QR 阅读器库(Zbar、Zxing?) 制作董事页面 实现解析推送通知

Global site tag (gtag.js) - Google Analytics