条形码
package zxing;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
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;
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);
} catch (Exception e) {
e.printStackTrace();
}
//将位图矩阵BitMatrix保存为图片
try(FileOutputStream outStream = new FileOutputStream(file)){
ImageIO.write(MatrixToImageWriter.toBufferedImage(matrix), "png", outStream);
outStream.flush();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private static void readCode(File file) {
try {
BufferedImage image = ImageIO.read(file);
if(image == null) {
return;
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Map<DecodeHintType,Object> hints = new HashMap<>();
hints.put(DecodeHintType.CHARACTER_SET, "GBK");
hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
Result result = new MultiFormatReader().decode(bitmap,hints);
System.out.println("条形码内容:"+result.getText());
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
generateCode(new File("1dcode.png"), "123456789041", 500, 250);
readCode(new File("1dcode.png"));
}
}
条形码内容:123456789041
二维码
package zxing;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
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 com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class QRCodeTest {
/**
* 定义二维码的宽高
*/
private static int WIDTH = 300;
private static int HEIGHT = 300;
// 二维码格式
private static String FORMAT = "png";
// 生成二维码
public static void generateQRCode(File file, String content) {
// 定义二维码参数
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
// 设置编码
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 设置容错等级
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
// 设置边距(默认是5)
hints.put(EncodeHintType.MARGIN, 2);
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, WIDTH, HEIGHT);
Path path = file.toPath();
// 写到指定路径下
MatrixToImageWriter.writeToPath(bitMatrix, FORMAT, path);
} catch (Exception e) {
e.printStackTrace();
}
}
// 读取二维码
public static void readQrCode(File file) {
MultiFormatReader reader = new MultiFormatReader();
try {
BufferedImage image = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
Map<DecodeHintType,Object> hints = new HashMap<>();
//设置编码
hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
Result result = reader.decode(binaryBitmap,hints);
System.out.println("解析结果:"+result.toString());
System.out.println("二维码格式:"+result.getBarcodeFormat());
System.out.println("二维码文本内容:"+result.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
generateQRCode(new File("2dcode.png"), "https://www.baidu.com");
readQrCode(new File("2dcode.png"));
}
}
解析结果:https://www.baidu.com
二维码格式:QR_CODE
二维码文本内容:https://www.baidu.com