上次我们用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() {
}
}
现在二维码越来越流行,有很多方法可以实现,这只是其中一种。当然如有不当之处请指出我们共同学习!