图片二维码生成工具类(扫码直接跳转)

1、首先需要导入jar包

<dependency>
   <groupId>com.google.zxing</groupId>
   <artifactId>core</artifactId>
   <version>2.2</version>
</dependency>

2、工具类

package util;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Hashtable;

public class QrCodeUtils {

	public static byte[] creatRrCode(String contents, int width, int height) {
        String binary = null;
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(
                    contents, BarcodeFormat.QR_CODE, width, height, hints);
            // 1、读取文件转换为字节数组
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            BufferedImage image = toBufferedImage(bitMatrix);
            //转换成png格式的IO流
            ImageIO.write(image, "png", out);
            byte[] bytes = out.toByteArray();

            // 2、将字节数组转为二进制
            return bytes;
        } catch (WriterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /**
     * image流数据处理
     *
     * @author ianly
     */
    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
            }
        }
        return image;
    }

	public static void main(String[] args) {
		
		byte[] bytes = creatRrCode("http://www.baidu.com.cn", 200, 200);
		FileOutputStream fos = null;
		try {
			 fos = new FileOutputStream(new File("d:/qrcode.png"));
			fos.write(bytes);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(fos!=null){
				try {
					fos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}

}

3、调用(页面直接使用<img>标签获取控制器生成的图片)

@RequestMapping("/makeQrCode")
    public void qfCode(HttpServletRequest request,HttpServletResponse response) throws IOException {
        byte[] bytes = QrCodeUtils.creatRrCode(“你想跳转的路径(可以配合前端传参数)”, 200, 200);
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        BufferedImage bi1 = ImageIO.read(bais);
        // 禁止图像缓存。
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        response.setContentType("image/jpeg");
        try {
            ImageIO.write(bi1, "jpg", response.getOutputStream());//不管输出什么格式图片,此处不需改动
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(bais!=null){
                bais.close();
            }
        }
    }

页面js

function make() {
        layer.open({
            type:1,
            area: ["400px","400px"],
            title:"家政服务人员信用信息二维码生成",
            shadeClose: false,
            content:'<p style="text-align:center"><img src="${base}/makeQrCode"/></p>',
            btn:['打印二维码','关闭'],
            yes: function (index,layero) {
                window.print();
            },
            btn2: function(){
                window.close();
            }
        });
    }

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页