1、借助第三方jar,如zxing
zxing:https://github.com/zxing
-
package com.han.utils; -
import java.awt.image.BufferedImage; -
import java.io.File; -
import java.io.IOException; -
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.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 ZxingQrCodeUtil { -
/* -
* 定义二维码的宽高 -
*/ -
private static int WIDTH=300; -
private static int HEIGHT=300; -
private static String FORMAT="png";//二维码格式 -
//生成二维码 -
public static void createZxingqrCode(String content){ -
//定义二维码参数 -
Map hints=new HashMap(); -
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//设置编码 -
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置容错等级 -
hints.put(EncodeHintType.MARGIN, 2);//设置边距默认是5 -
try { -
BitMatrix bitMatrix=new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints); -
bitMatrix = deleteWhite(bitMatrix);//删除白边 方法在下面 -
Path path = new File("E:\\qr.png").toPath(); -
MatrixToImageWriter.writeToPath(bitMatrix, FORMAT, path);//写到指定路径下 -
} catch (Exception e) { -
e.printStackTrace(); -
} -
} -
-
/**删除二维码的白边*/
-
private static BitMatrix deleteWhite(BitMatrix matrix) {
int[] rec = matrix.getEnclosingRectangle();
int resWidth = rec[2] + 1;
int resHeight = rec[3] + 1;BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
resMatrix.clear();
for (int i = 0; i < resWidth; i++) {
for (int j = 0; j < resHeight; j++) {
if (matrix.get(i + rec[0], j + rec[1]))
resMatrix.set(i, j);
}
}
return resMatrix;
} -
-
-
//读取二维码 -
public static void readZxingQrCode(){ -
MultiFormatReader reader = new MultiFormatReader(); -
File file = new File("E:\\qr.png"); -
try { -
BufferedImage image = ImageIO.read(file); -
BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image))); -
Map hints=new HashMap(); -
hints.put(EncodeHintType.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) { -
// TODO Auto-generated catch block -
e.printStackTrace(); -
} -
} -
}
本文介绍如何利用Zxing库在Java中生成二维码图片,并从图片中读取二维码信息。详细展示了设置二维码参数,包括编码、容错等级和边距,以及生成和保存二维码的过程。同时,提供了读取二维码并解析其内容的方法。
3752

被折叠的 条评论
为什么被折叠?



