当前位置:编程学习 > JAVA >>

条形码/二维码之开源利器ZXing图文介绍

 

继前面介绍的一个日本开源软件(该软件只能实现QRCode)原文:Java实现二维码QRCode的编码和解码  ,今发现又一优秀的开源利器-- ZXing,相比而言它更加灵活方便,可以实现多种编码格式。

 

全文目录:

基本介绍

二维码(比如:QRCode)的编码和解码演示

条形码(比如:EAN-13)的编码和解码演示

【一】、 基本介绍 :

 1-1. ZXing是一个开源Java类库用于解析多种格式的条形码和二维码.

官网:http://code.google.com/p/zxing/

截止目前为止最新版本为1.7,提供以下编码格式的支持:

UPC-A and UPC-E

EAN-8 and EAN-13

Code 39

Code 93

Code 128

QR Code

ITF

Codabar

RSS-14 (all variants)

Data Matrix

PDF 417 ('alpha' quality)

Aztec ('alpha' quality)

同时官网提供了Android、cpp、C#、iPhone、j2me、j2se、jruby、objc、rim、symbian等多种应用的类库,具体详情可以参考下载的源码包中。

 

1-2. 本文和之前的那篇文章一样,主要是在PC上实现条形码(EAN-13)和二维码(QRCode) 的编码和解码的示例,以供大家参考,用到了源码中core和javase下面的相关源代码,附件提供自己编译之后的lib包:

zxing.jar

zxing-j2se.jar

有关各种手机系统的应用,有兴趣的朋友可以下载官方源码包,包下有具体详细的应用介绍。

【二】、 二维码(QRCode)的编码和解码演示:

 

 2-1. 编码示例:

Java代码 

package michael.zxing; 

 

import java.io.File; 

import java.util.Hashtable; 

 

import com.google.zxing.BarcodeFormat; 

import com.google.zxing.EncodeHintType; 

import com.google.zxing.MultiFormatWriter; 

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

import com.google.zxing.common.BitMatrix; 

import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; 

 

/**

 * @blog http://sjsky.iteye.com

 * @author Michael

 */ 

public class ZxingEncoderHandler { 

 

    /**

     * 编码

     * @param contents

     * @param width

     * @param height

     * @param imgPath

     */ 

    public void encode(String contents, int width, int height, String imgPath) { 

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

        // 指定纠错等级 

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

        // 指定编码格式 

        hints.put(EncodeHintType.CHARACTER_SET, "GBK"); 

        try { 

            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, 

                    BarcodeFormat.QR_CODE, width, height, hints); 

 

            MatrixToImageWriter 

                    .writeToFile(bitMatrix, "png", new File(imgPath)); 

 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

    } 

 

    /**

     * @param args

     */ 

    public static void main(String[] args) { 

        String imgPath = "d:/test/twocode/michael_zxing.png"; 

        String contents = "Hello Michael(大大),welcome to Zxing!" 

                + "\nMichael’s blog [ http://sjsky.iteye.com ]" 

                + "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto ]"; 

        int width = 300, height = 300; 

        ZxingEncoderHandler handler = new ZxingEncoderHandler(); 

        handler.encode(contents, width, height, imgPath); 

 

        System.out.println("Michael ,you have finished zxing encode."); 

    } 

 运行后生成的二维码图片如下:

                               

 

 和前篇介绍一样,用手机的二维码扫描软件(本人用的:android 快拍二维码 )来测试下,识别成功的截图如下:

 

 

2-2. 解码示例:

Java代码 

package michael.zxing; 

 

import java.awt.image.BufferedImage; 

import java.io.File; 

import java.util.Hashtable; 

 

import javax.imageio.ImageIO; 

 

import com.google.zxing.BinaryBitmap; 

import com.google.zxing.DecodeHintType; 

import com.google.zxing.LuminanceSource; 

import com.google.zxing.MultiFormatReader; 

import com.google.zxing.Result; 

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

import com.google.zxing.common.HybridBinarizer; 

 

/**

 * @blog http://sjsky.iteye.com

 * @author Michael

 */ 

public class ZxingDecoderHandler { 

 

    /**

     * @param imgPath

     * @return String

     */ 

    public String decode(String imgPath) { 

        BufferedImage image = null; 

        Result result = null; 

        try { 

            image = ImageIO.read(new File(imgPath)); 

            if (image == null) { 

                System.out.println("the decode image may be not exit."); 

            } 

            LuminanceSource source = new BufferedImageLuminanceSo

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,