天天看点

Java生成二维码

1,下载jar包(QRCode.jar)

<code>&lt;dependency&gt;</code>

<code>&lt;groupId&gt;QRCode&lt;/groupId&gt;</code>

<code>&lt;artifactId&gt;QRCode&lt;/artifactId&gt;</code>

<code>&lt;version&gt;3.0&lt;/version&gt;</code>

<code>&lt;/dependency&gt;</code>

2,编写实体类实现二维码的生成

<code>public class CreateQRCode {</code>

<code>/**</code>

<code>* 创建二维码</code>

<code>* @param qrData 生成二维码中要存储的信息</code>

<code>* @param path 二维码图片存储路径 eg:"D:/qrcode.png"</code>

<code>* @throws Exception</code>

<code>*/</code>

<code>public static boolean creatQrcode(String qrData, String path) {</code>

<code>try {</code>

<code>Qrcode qrcode = new Qrcode();</code>

<code>qrcode.setQrcodeErrorCorrect('M');//纠错等级(分为L、M、H三个等级)</code>

<code>qrcode.setQrcodeEncodeMode('B');//N代表数字,A代表a-Z,B代表其它字符</code>

<code>qrcode.setQrcodeVersion(7);//版本</code>

<code>//设置一下二维码的像素</code>

<code>int width = 67 + 12 * (7 - 1);</code>

<code>int height = 67 + 12 * (7 - 1);</code>

<code>BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</code>

<code>//绘图</code>

<code>Graphics2D gs = bufferedImage.createGraphics();</code>

<code>gs.setBackground(Color.WHITE);</code>

<code>gs.setColor(Color.BLACK);</code>

<code>gs.clearRect(0, 0, width, height);//清除下画板内容</code>

<code>//设置下偏移量,如果不加偏移量,有时会导致出错。</code>

<code>int pixoff = 2;</code>

<code>byte[] d = qrData.getBytes("utf-8");</code>

<code>if (d.length &gt; 0 &amp;&amp; d.length &lt; 120) {</code>

<code>boolean[][] s = qrcode.calQrcode(d);</code>

<code>for (int i = 0; i &lt; s.length; i++) {</code>

<code>for (int j = 0; j &lt; s.length; j++) {</code>

<code>if (s[j][i]) {</code>

<code>gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);</code>

<code>}</code>

<code>gs.dispose();</code>

<code>bufferedImage.flush();</code>

<code>ImageIO.write(bufferedImage, "png", new File(path));</code>

<code>return true;</code>

<code>} catch (IOException e) {</code>

<code>e.printStackTrace();</code>

<code>return false;</code>

<code>* 解析二维码(QRCode)</code>

<code>*</code>

<code>* @param imgPath 图片路径</code>

<code>* @return</code>

<code>public static String decoderQRCode(String imgPath) {</code>

<code>//QRCode 二维码图片的文件</code>

<code>File imageFile = new File(imgPath);</code>

<code>BufferedImage bufImg = null;</code>

<code>String content = null;</code>

<code>bufImg = ImageIO.read(imageFile);</code>

<code>QRCodeDecoder decoder = new QRCodeDecoder();</code>

<code>content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");</code>

<code>System.out.println("Error: " + e.getMessage());</code>

<code>} catch (DecodingFailedException dfe) {</code>

<code>System.out.println("Error: " + dfe.getMessage());</code>

<code>dfe.printStackTrace();</code>

<code>return content;</code>

<code>class TwoDimensionCodeImage implements QRCodeImage {</code>

<code>//BufferedImage作用将一幅图片加载到内存中</code>

<code>BufferedImage bufImg;</code>

<code>public TwoDimensionCodeImage(BufferedImage bufImg) {</code>

<code>this.bufImg = bufImg;</code>

<code>@Override</code>

<code>public int getWidth() {</code>

<code>return bufImg.getWidth();//返回像素宽度</code>

<code>public int getHeight() {</code>

<code>return bufImg.getHeight();//返回像素高度</code>

<code>public int getPixel(int i, int i1) {</code>

<code>return bufImg.getRGB(i, i1);//得到长宽值,即像素值,i,i1代表像素值</code>

3.controller调用

<code>package com.st.project.controller;</code>

<code>import com.st.project.common.AjaxResult;</code>

<code>import org.springframework.beans.factory.annotation.Value;</code>

<code>import org.springframework.stereotype.Controller;</code>

<code>import org.springframework.web.bind.annotation.PostMapping;</code>

<code>import org.springframework.web.bind.annotation.RequestMapping;</code>

<code>import org.springframework.web.bind.annotation.ResponseBody;</code>

<code>import javax.servlet.http.HttpServletRequest;</code>

<code>import static com.st.project.common.CreateQRCode.creatQrcode;</code>

<code>import static com.st.project.common.CreateQRCode.decoderQRCode;</code>

<code>@Controller</code>

<code>@RequestMapping("/qrcode")</code>

<code>public class QrcodeController {</code>

<code>@Value("${portals.upload.image.path}")</code>

<code>private String qrcodePath; //二维码存储路径</code>

<code>@ResponseBody</code>

<code>@PostMapping("/add.dd")</code>

<code>public AjaxResult addQrcode(HttpServletRequest request){</code>

<code>AjaxResult ajaxResult = new AjaxResult();</code>

<code>ajaxResult.setState(false);</code>

<code>String qrData=request.getParameter("qrData");</code>

<code>String qrSuffix=request.getParameter("qrSuffix");</code>

<code>String qrcode=System.currentTimeMillis()+"."+qrSuffix;</code>

<code>String path=qrcodePath+qrcode;</code>

<code>boolean getQrcode=creatQrcode(qrData,path);</code>

<code>if(getQrcode==true){</code>

<code>ajaxResult.setState(true);</code>

<code>ajaxResult.setData(qrcode);</code>

<code>return ajaxResult;</code>

<code>* 解析二维码</code>

<code>@PostMapping("/decoder.dd")</code>

<code>public AjaxResult decoderQrcode(HttpServletRequest request){</code>

<code>String qrcode=request.getParameter("qrcode");</code>

<code>String qrData=decoderQRCode(qrcodePath+qrcode);</code>

<code>if(qrData!=null &amp;&amp; !"".equals(qrData)){</code>

<code>ajaxResult.setData(qrData);</code>

此时已生成一张名为qrcode.png的二维码图片: