google zxing制作二维码

发布时间:2020-09-21编辑:脚本学堂
本文介绍了使用google zxing制作二维码的方法,有关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 表示换行符 rn
 

复制代码 代码示例:
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:Projectfoshan_tobaccocode.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebappsfsycsmsimagesqrcodeImg"; 
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(); 


 

google zxing 二维码
五、附件
具体的代码请查看附件 fsycsms-qrcode.rar
附件的工程是一个maven工程。
请导入 eclipse 中,eclipse 我使用的版本是 eclipse-jee-indigo-SR2-win32    (3.7的)
工程中的代码结构如下:
其中的源包(Source Folder) src/qrcode/core 和 src/qrcode/javase ,就是在上面第2步中取出的包。