二维码的使用场景越来越多,大家也越来越倾向于扫一扫来实现信息的获取,那么二维码到底是怎么生成的呢,接下来讲述我们是怎么将一串信息转化为二维码图片的代码如下:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.EnumMap;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
/**
* 根据字符串生成二维码工具类
*/
public class QrCodeUtil {
//二维码颜色 0x00000000,黑色 (注:二维码颜色色差大,扫描快,但如果'BLACK'设置为黑色外其他颜色,可能无法扫描)
private static final int BLACK = 0x00000000;
// 二维码背景色 0xFFFFFFFF,白色
private static final int WHITE = 0xFFFFFFFF;
//二维码图片宽度
private static final int width = 300;
//二维码图片高度
private static final int height = 300;
// 二维码格式参数
private static final EnumMap static { //二维码的纠错级别(排错率),4个级别:L (7%)、M (15%)、Q (25%)、H (30%)(最高H),纠错信息同样存储在二维码中, //纠错级别越高,纠错信息占用的空间越多,那么能存储的有用讯息就越少;选择M,扫描速度快。 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 二维码边界空白大小 1,2,3,4 (4为默认,最大) hints.put(EncodeHintType.MARGIN, 1); hints.put(EncodeHintType.CHARACTER_SET, 'UTF-8'); } /** * 测试主函数 * @param args */ public static void main(String[] args) { String content = 'abc123456';//需要转化为二维码的信息 String format = 'png'; //生成的图片将会保存到d盘根目录下,也可以自己设置路径 writeToFile(content,format,new File('D:'+File.separator+'qrcode.png')); } /** * 二维码输出到文件 * @param contents 二维码内容 * @param format 图片格式 * @param file 输出文件 */ public static void writeToFile(String contents, String format, File file) { BufferedImage image = encodeImg(contents); try { ImageIO.write(image, format, file); } catch (IOException e) { System.out.println('二维码写入文件失败' + e); } } /** * 绘制二维码 * @param contents 二维码内容 * @return image 二维码图片 */ public static BufferedImage encodeImg(String contents) { BufferedImage image = null; try { BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints); image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); int width = matrix.getWidth(); int height = matrix.getHeight(); for (int x = 0; x < width;="" x++)=""> for (int y = 0; y < height;="" y++)=""> image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); } } } catch (Exception e) { System.out.println('生成二维码失败' + e); } return image; } }
联系客服