天天看點

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的二維碼圖檔: