<dependency>
<groupId>com.google.zxinggroupId>
<artifactId>javaseartifactId>
<version>3.5.0version>
dependency>
//条形码内容
String content = "这里是条形码生成的内容!!!";
//条形码格式(选择二维码格式)
BarcodeFormat format = BarcodeFormat.QR_CODE;
//条形码图片宽度和高度
int width = 200, height = 200;
//条形码图片自定义配置(非必填),可以设置二维码的内容编码格式、纠错等级等待
Map<EncodeHintType, Object> hints = new HashMap<>();
// 设置内容编码格式
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
// 设置纠错等级
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
//生成条形码
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix bitMatrix = writer.encode(content, format, width, height, hints);
//设置二维码颜色
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
//转成图片信息
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
BarcodeFormat
(条形码类型)设置生成条形码的类型。
如:二维码、EAN-13码、UPC-A码、Code-128码、Code-39码等等。
条形码类型 | 描述 |
---|---|
BarcodeFormat.AZTEC | 阿兹特克码 |
BarcodeFormat.CODABAR | Codabar码 |
BarcodeFormat.CODE_39 | CODE-30码 |
BarcodeFormat.CODE_93 | CODE-93码 |
BarcodeFormat.CODE_128 | CODE-128码 |
BarcodeFormat.DATA_MATRIX | 矩阵式二维条码 |
BarcodeFormat.EAN_8 | EAN-8码 |
BarcodeFormat.EAN_13 | EAN-13码 |
BarcodeFormat.ITF | 交插二五条码 |
BarcodeFormat.MAXICODE | MaxiCode二维条码 |
BarcodeFormat.PDF_417 | PDF417 |
BarcodeFormat.QR_CODE | 二维码 |
BarcodeFormat.RSS_14 | RSS 14 |
BarcodeFormat.RSS_EXPANDED | RSS EXPANDED |
BarcodeFormat.UPC_A | UPC A |
BarcodeFormat.UPC_E | UPC E |
BarcodeFormat.UPC_EAN_EXTENSION | UPC EAN EXTENSION |
EncodeHintType
(条形码自定义属性)key | valueClass | value | 描述 | |
---|---|---|---|---|
EncodeHintType.ERROR_CORRECTION | ErrorCorrectionLevel | ErrorCorrectionLevel.L | 容错率~7% | 设置条形码识别容错率 |
ErrorCorrectionLevel.M | 容错率~15% | |||
ErrorCorrectionLevel.Q | 容错率~25% | |||
ErrorCorrectionLevel.H | 容错率~30% | |||
EncodeHintType.CHARACTER_SET | String | UTF-8、GBK、ASCI等 | 字符编码,注:存在中文建议使用UTF-8 | |
EncodeHintType.DATA_MATRIX_SHAPE | SymbolShapeHint | SymbolShapeHint.FORCE_NONE | 默认形状 | 设置条形码外形 |
SymbolShapeHint.FORCE_SQUARE | 正方形 | |||
SymbolShapeHint.FORCE_RECTANGLE | 矩形 | |||
EncodeHintType.DATA_MATRIX_COMPACT | Boolean | 类型为Boolean,或“true”或“false”字符串值 | 指定是否为数据矩阵使用紧凑模式 | |
EncodeHintType.MARGIN | Integer String | 可以使用Integer或String,但是String必须是整数 | 设置二维码的外边距 | |
EncodeHintType.PDF417_COMPACT | Boolean String | 可以使用Boolean或String,但是String必须是"true" or "false" | 指定PDF417是否使用紧凑模式 | |
EncodeHintType.PDF417_COMPACTION | Compaction String | Compaction.AUTO | 自动 | 指定对PDF417使用的压缩模式 |
Compaction.TEXT | 文本 | |||
Compaction.BYTE | 字节 | |||
Compaction.NUMERIC | 数字 | |||
String | 必须和枚举值相同 | |||
EncodeHintType.PDF417_DIMENSIONS | Dimensions | new Dimensions() | 指定PDF417的最小和最大行数和列数 | |
EncodeHintType.PDF417_AUTO_ECI | Boolean String | 可以使用Boolean或String,但是String必须是"true" or "false" | 指定编码PDF417时是否自动插入eci。请注意,在这种情况下,将为输入中的不属于ISO-8859-1字符集的字符选择最紧凑的字符编码。根据经验,有些扫描仪不支持cp-1256(阿拉伯语)这样的编码。在这种情况下,可以通过CHARACTER_SET编码提示将编码强制为UTF-8 | |
EncodeHintType.AZTEC_LAYERS | Integer String | 可以使用Integer或String,但是String必须是整数 | 指定Aztec code所需的层数。负数(-1、-2、-3、-4)指定一个紧凑的Aztec code。0表示使用最小层数(默认值)。正数(1,2,..32)指定一个普通的(非紧凑的)Aztec code。 | |
EncodeHintType.QR_VERSION | Integer String | 可以使用Integer或String,但是String必须是整数 | 指定要编码的QR码的确切版本。 | |
EncodeHintType.QR_MASK_PATTERN | Integer String | 可以使用Integer或String,但是String必须是整数 | 指定要使用的二维码掩码图案。允许的值为0到QRCode.NUM_MASK_PATTERNS-1。默认情况下,代码将自动选择最佳掩码模式。 | |
EncodeHintType.QR_COMPACT | Boolean String | 可以使用Boolean或String,但是String必须是"true" or "false" | 指定二维码是否使用压缩模式。请注意,在执行压缩时,将为输入中不属于ISO-8859-1字符集的字符选择最紧凑的字符编码。根据经验,有些扫描仪不支持cp-1256(阿拉伯语)这样的编码。在这种情况下,可以通过CHARACTER_SET编码提示将编码强制为UTF-8。 | |
EncodeHintType.GS1_FORMAT | Boolean String | 可以使用Boolean或String,但是String必须是"true" or "false" | 指定是否应该将数据编码为GS1标准。 | |
EncodeHintType.FORCE_CODE_SET | String | 有效值为"A", "B", "C" | 将使用哪种编码的力。目前仅用于code -128代码集(类型字符串)。此选项与CODE128_COMPACT互斥。 | |
EncodeHintType.FORCE_C40 | Boolean String | 可以使用Boolean或String,但是String必须是"true" or "false" | 强制C40编码数据矩阵。这个选项和DATA_MATRIX_COMPACT是互斥的。 | |
EncodeHintType.CODE128_COMPACT | Boolean String | 可以使用Boolean或String,但是String必须是"true" or "false" | 指定code -128代码是否使用紧凑模式。这可以产生略小的条形码。此选项和FORCE_CODE_SET是互斥的。 |
MultiFormatWriter
(对条形码内容编码)/*
* 它为请求的BarcodeFormat查找适当的Writer子类,并用提供的内容对条形码进行编码。
*
* @param contents 条形码内容
* @param format 条形码格式
* @param width 条形码宽度
* @param height 条形码高度
* @param hints 条形码图片自定义配置(非必填)
* @return 条形码
*/
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix bitMatrix = writer.encode(content, format, width, height, hints);
MatrixToImageWriter
(将BitMatrix写入BufferedImage、文件或流。)//设置二维码颜色(非必填,默认黑白)
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
//将二维码转成图像缓冲区类
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
//将二维码写入文件中(writeToFile已不建议使用)
File file = new File("a.png");
MatrixToImageWriter.writeToFile(bitMatrix, "png", file);
MatrixToImageWriter.writeToFile(bitMatrix, "png", file, matrixToImageConfig);
MatrixToImageWriter.writeToPath(bitMatrix, "png", file.toPath());
MatrixToImageWriter.writeToPath(bitMatrix, "png", file.toPath(), matrixToImageConfig);
//将二维码写入流中
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);
MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream, matrixToImageConfig);