如何用java完成一个二维码扫码功能呢(ssh)core-3.3.0.jar????

二维码扫码功能步骤(java):

步骤一:
引入我们需要的工具类,当然,这里我们需要引入谷歌的一个jar包:core-3.3.0.jar
链接:https://pan.baidu.com/s/1-pCh4LM77VqiG1Dd9yplBQ
提取码:hvt7

package com.guanzhuo.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.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;

/**
 * 二维码工具类
 *类名称:QRCodeUtil
 *类描述:
 *创建人:dengkai
 *创建时间:2019年6月11日 上午9:41:23 
 * @version
 */
@Component("qRCodeUtil")
public class QRCodeUtil {
    private static final int width = 300;// 宽度
    private static final int height = 300;// 高度
    private static final String format = "png";// 图片格式
    private static final Map hints = new HashMap();//二维码参数

    static {
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 内容所使用字符集编码
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//容错等级L/M/Q/H其中L为最低
        hints.put(EncodeHintType.MARGIN, 2);//二维码与图片边距
    }
    
    /**
     * 生成指定内容指定大小的二维码
     * @param content
     * @param width
     * @param height
     * @return
     * @throws WriterException
     * @throws IOException
     */
    public  BufferedImage toBufferedImage(String content, int width, int height) throws WriterException, IOException {
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
        return MatrixToImageWriter.toBufferedImage(bitMatrix);
    }
   
    public  void writeToStream(String content, OutputStream stream, int width, int height) throws WriterException, IOException {
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
        MatrixToImageWriter.writeToStream(bitMatrix, format, stream);
    }
   
   /**
    * 生成指定内容指定指定路径的二维码
    * @param content
    * @param path
    * @param width
    * @param height
    * @throws WriterException
    * @throws IOException
    */
   public  void createQRCode(String content, String path, int width, int height) throws WriterException, IOException {
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
    //jdk1.7版本以上才能调用
    MatrixToImageWriter.writeToPath(bitMatrix, format, new File(path).toPath());
    }
}

步骤二:
使用工具类即刻,这边由于项目需求,我使用的是ssh框架整合,具体代码写于action内:

!! 这里我分为了两个action,一个用于生成二维码显示到页面,另一个用于一个传递值的操作

createQrode.action
在你需要显示二维码的页面利用img标签直接访问这个action地址即可显示二维码,在BufferedImage 的括号了吗可以填写一个字符串,也可以是一个网络地址,字符串扫出来则是一串字符,链接地址则会跳转到该链接地址,从前台带过来的值也可以一并以地址栏传值的形式带过去

 
	/**
	 * 生成二维码
	 * @throws Exception
	 */
	@Action("createQrode")
	public void createQrode() throws Exception{
		//获取id
		String fid = request.getParameter("fid");
		try {
			//采用输出流的方式
			//调用二维码生成的工具类 
			BufferedImage bufferImage = qRCodeUtil.toBufferedImage("http://127.0.0.1:8080/thm/templets/meeting/sign.html?fid='"+fid+"'", 400, 400);
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			boolean flag = ImageIO.write(bufferImage, "gif", out);
			byte[] bytes = out.toByteArray();
			OutputStream stream = response.getOutputStream();
		    stream.write(bytes);
		} catch (WriterException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}

meetFindQrode.action

这个action的存在实际上是用来传值用的,因为两个页面间的传值相对复杂,甚至再有的框架中不支持两个页面的跳转以及直接访问。

 /**
	 * 二维码页面
	 * @throws Exception
	 */
	@Action(value ="meetFindQrode",results = {@Result(name="mfind",location="/templets/meeting/attendance.jsp")})
	public String meetFindQrode() throws Exception{
		String fid = request.getParameter("fid");
		return "mfind";
	}
	

最后总结一下大概的一个思路:

首先我们在页面上可能有一个入口,比如有一个按钮,叫做生成二维码,点击的时候我们跳转到后台findaction,action拿到前台传过来的fid值,跳转到另一个实现二维码的页面。在这个新的页面有一个img便签,src的地址是我们创建二维码的action地址,action返回一个图片到页面的img,就是我们看到的二维码了,这个时候扫码就会有东西了,具体东西还要看你写的什么东西了。可以在括号内写入www.baidu.com进行测试,微信、qq都可以扫码测试!

你可能感兴趣的:(java,spring,myeclipse)