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