java 生成二维码

 

     上次我们用Java生成了条形码 地址:https://www.cnblogs.com/zhang-dongliang/p/10829763.html,这次我们来看一下二维码

现在无处不在都是二维码的身影,大街小巷都随处可见,小到街道小贩大到公司企业无处不在,但是二维码是怎么生成的呢,下面我们就来看看用Java怎么生成二维码的吧.

    这次我们用到zxing首先介绍一下zxing

ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。

Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码,这是一个开源的项目Git地址:https://github.com/zxing/zxing

     下面进入正题首先引入pom.xml

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.0</version>
</dependency>

  

按照国际惯例,废话不多说直接上代码:

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 org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
/**
 * @author pillar
 * @date 2019-05-08
 */
public class codeUtil {
    /**
     *二维码实现
     * @param msg
     * @param path
     */
    public static void getBarCode(String msg,String path){
        try {
            File file=new File(path);
            OutputStream ous=new FileOutputStream(file);
            if(StringUtils.isEmpty(msg) || ous==null)
                return;
            String format = "png";
            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            Map<EncodeHintType,String> map =new HashMap<EncodeHintType, String>();
            //设置编码 EncodeHintType类中可以设置MAX_SIZE, ERROR_CORRECTION,CHARACTER_SET,DATA_MATRIX_SHAPE,AZTEC_LAYERS等参数
            map.put(EncodeHintType.CHARACTER_SET,"UTF-8");
            map.put(EncodeHintType.MARGIN,"2");
            //生成二维码
            BitMatrix bitMatrix = new MultiFormatWriter().encode(msg, BarcodeFormat.QR_CODE,300,300,map);
            MatrixToImageWriter.writeToStream(bitMatrix,format,ous);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        String msg = "pillar666";
        String path = "D:\\pillar\\pilar666.png";
        codeUtil.getBarCode(msg,path);
    }
}

  

生成图形如下所示:

其实EncodeHintType这个类中可以设置的样式格式还是比较多的源码如下:

public enum EncodeHintType {
    ERROR_CORRECTION,
    CHARACTER_SET,
    DATA_MATRIX_SHAPE,
    /** @deprecated */
    @Deprecated
    MIN_SIZE,
    /** @deprecated */
    @Deprecated
    MAX_SIZE,
    MARGIN,
    PDF417_COMPACT,
    PDF417_COMPACTION,
    PDF417_DIMENSIONS,
    AZTEC_LAYERS,
    QR_VERSION;

    private EncodeHintType() {
    }
}

  

BarcodeFormat这个类主要是设置二维码的类型,有好多类型可供选择
public enum BarcodeFormat {
    AZTEC,
    CODABAR,
    CODE_39,
    CODE_93,
    CODE_128,
    DATA_MATRIX,
    EAN_8,
    EAN_13,
    ITF,
    MAXICODE,
    PDF_417,
    QR_CODE,
    RSS_14,
    RSS_EXPANDED,
    UPC_A,
    UPC_E,
    UPC_EAN_EXTENSION;

    private BarcodeFormat() {
    }
}

  现在二维码越来越流行,有很多方法可以实现,这只是其中一种。当然如有不当之处请指出我们共同学习!

 
posted @ 2019-05-08 23:14  pillarzhang  阅读(6584)  评论(0编辑  收藏  举报