条形码(barcode)
- 将宽度不等的多个黑条和空白,按照一定的编码规则和排列,用以表达一组信息和图形标识符
- 通常代表一串数字/字母,每一位有特殊含义
- 一般数据容量30个数字/字母
- 专门机构管理:中国物品编码中心
二维码,二维条形码
- 用某种特定的几何图形按照一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息。
- 比一维条形码能存更多信息,表示更多数据类型
- 能够存储数字/字母/汉字/图片等信息
- 字符集128个字符
- 存储几百到几十KB的字符
- 抗损坏
JAVA里处理二维码文件
依赖于第三方的库
(1)Zxing(Zebra Crossing)
- Google出品
- 支持1D和2D的Barcode
- 主要类
– BitMatrix 位图矩阵
– MulitFormatWriter 位图编写器
– MatrixToImageWriter 写入图片
条形码解析(写和读)
package zxing;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
public class BarCodeTest {
/**
* generateCode 根据code生成相应的一维码
* @param file 一维码目标文件
* @param code 一维码内容
* @param width 图片宽度
* @param height 图片高度
*/
//写条形码文件
public static void generateCode(File file, String code, int width, int height) {
//定义位图矩阵BitMatrix
BitMatrix matrix = null;
try {
// 使用code_128格式进行编码生成100*25的条形码
MultiFormatWriter writer = new MultiFormatWriter();
matrix = writer.encode(code,BarcodeFormat.CODE_128, width, height, null);
//matrix = writer.encode(code,BarcodeFormat.EAN_13, width, height, null);
} catch (WriterException e) {
e.printStackTrace();
}
//将位图矩阵BitMatrix保存为图片
try (FileOutputStream outStream = new FileOutputStream(file)) {
ImageIO.