日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java利用QRCode.jar包实现二维码编码与解码

發布時間:2025/3/18 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java利用QRCode.jar包实现二维码编码与解码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QRcode是日本人94年開發出來的。首先去QRCode的官網http://swetake.com/qrcode/java/qr_java.html,把要用的jar包下下來,導入到項目里去。qrcode需要設置一個版本號,這個版本號代表你生成的二維碼的像素的大小。版本1是21*21的,版本號每增加1,邊長增加4。也就是說版本7的大小是45 * 45的。版本號最大值是40。另外,版本7的編碼的字節數如果超過了119,那么將無法編碼

1.二維碼圖片類實現

package com.reyo.code; import java.awt.image.BufferedImage; import jp.sourceforge.qrcode.data.QRCodeImage; public class TwoDimensionCodeImage implements QRCodeImage { BufferedImage bufImg; public TwoDimensionCodeImage(BufferedImage bufImg) { this.bufImg = bufImg; } @Override public int getHeight() { return bufImg.getHeight(); } @Override public int getPixel(int x, int y) { return bufImg.getRGB(x, y); } @Override public int getWidth() { return bufImg.getWidth(); } }

?2.二維碼編解碼類實現

package com.reyo.code; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; import jp.sourceforge.qrcode.QRCodeDecoder; import jp.sourceforge.qrcode.exception.DecodingFailedException; import com.swetake.util.Qrcode; public class TwoDimensionCode { /** * 生成二維碼(QRCode)圖片 * @param content 存儲內容 * @param imgPath 圖片路徑 */ public void encoderQRCode(String content, String imgPath) { this.encoderQRCode(content, imgPath, "png", 7); } /** * 生成二維碼(QRCode)圖片 * @param content 存儲內容 * @param output 輸出流 */ public void encoderQRCode(String content, OutputStream output) { this.encoderQRCode(content, output, "png", 7); } /** * 生成二維碼(QRCode)圖片 * @param content 存儲內容 * @param imgPath 圖片路徑 * @param imgType 圖片類型 */ public void encoderQRCode(String content, String imgPath, String imgType) { this.encoderQRCode(content, imgPath, imgType, 7); } /** * 生成二維碼(QRCode)圖片 * @param content 存儲內容 * @param output 輸出流 * @param imgType 圖片類型 */ public void encoderQRCode(String content, OutputStream output, String imgType) { this.encoderQRCode(content, output, imgType, 10); } /** * 生成二維碼(QRCode)圖片 * @param content 存儲內容 * @param imgPath 圖片路徑 * @param imgType 圖片類型 * @param size 二維碼尺寸 */ public void encoderQRCode(String content, String imgPath, String imgType, int size) { try { BufferedImage bufImg = this.qRCodeCommon(content, imgType, size); File imgFile = new File(imgPath); // 生成二維碼QRCode圖片 ImageIO.write(bufImg, imgType, imgFile); } catch (Exception e) { e.printStackTrace(); } } /** * 生成二維碼(QRCode)圖片 * @param content 存儲內容 * @param output 輸出流 * @param imgType 圖片類型 * @param size 二維碼尺寸 */ public void encoderQRCode(String content, OutputStream output, String imgType, int size) { try { BufferedImage bufImg = this.qRCodeCommon(content, imgType, size); // 生成二維碼QRCode圖片 ImageIO.write(bufImg, imgType, output); } catch (Exception e) { e.printStackTrace(); } } /** * 生成二維碼(QRCode)圖片的公共方法 * @param content 存儲內容 * @param imgType 圖片類型 * @param size 二維碼尺寸 * @return */ private BufferedImage qRCodeCommon(String content, String imgType, int size) { BufferedImage bufImg = null; try { Qrcode qrcodeHandler = new Qrcode(); // 設置二維碼排錯率,可選L(7%)、M(15%)、Q(25%)、H(30%),排錯率越高可存儲的信息越少,但對二維碼清晰度的要求越小 qrcodeHandler.setQrcodeErrorCorrect('M'); qrcodeHandler.setQrcodeEncodeMode('B'); // 設置設置二維碼尺寸,取值范圍1-40,值越大尺寸越大,可存儲的信息越大 qrcodeHandler.setQrcodeVersion(size); // 獲得內容的字節數組,設置編碼格式 byte[] contentBytes = content.getBytes("utf-8"); // 圖片尺寸 int imgSize = 67 + 12 * (size - 1); bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB); Graphics2D gs = bufImg.createGraphics(); // 設置背景顏色 gs.setBackground(Color.WHITE); gs.clearRect(0, 0, imgSize, imgSize); // 設定圖像顏色> BLACK gs.setColor(Color.BLACK); // 設置偏移量,不設置可能導致解析出錯 int pixoff = 2; // 輸出內容> 二維碼 if (contentBytes.length > 0 && contentBytes.length < 800) { boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes); for (int i = 0; i < codeOut.length; i++) { for (int j = 0; j < codeOut.length; j++) { if (codeOut[j][i]) { gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); } } } } else { throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800]."); } gs.dispose(); bufImg.flush(); } catch (Exception e) { e.printStackTrace(); } return bufImg; } /** * 解析二維碼(QRCode) * @param imgPath 圖片路徑 * @return */ public String decoderQRCode(String imgPath) { // QRCode 二維碼圖片的文件 File imageFile = new File(imgPath); BufferedImage bufImg = null; String content = null; try { bufImg = ImageIO.read(imageFile); QRCodeDecoder decoder = new QRCodeDecoder(); content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8"); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); e.printStackTrace(); } catch (DecodingFailedException dfe) { System.out.println("Error: " + dfe.getMessage()); dfe.printStackTrace(); } return content; } /** * 解析二維碼(QRCode) * @param input 輸入流 * @return */ public String decoderQRCode(InputStream input) { BufferedImage bufImg = null; String content = null; try { bufImg = ImageIO.read(input); QRCodeDecoder decoder = new QRCodeDecoder(); content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8"); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); e.printStackTrace(); } catch (DecodingFailedException dfe) { System.out.println("Error: " + dfe.getMessage()); dfe.printStackTrace(); } return content; } public static void main(String[] args) { String imgPath = "C:\\zhaochao.png"; String encoderContent =""; for(int i=0;i<40;i++) encoderContent+="銳洋智能"; TwoDimensionCode handler = new TwoDimensionCode(); handler.encoderQRCode(encoderContent, imgPath, "png",10); System.out.println("=============編碼成功!圖片為于:"+imgPath+"==============="); String decoderContent = handler.decoderQRCode(imgPath); System.out.println("============解析結果如下:==============="); System.out.println(decoderContent); System.out.println("=========解碼成功==========="); } }

?

總結

以上是生活随笔為你收集整理的Java利用QRCode.jar包实现二维码编码与解码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久激情免费视频 | 久久视频免费看 | 日本国产精品 | 欧美日韩一区二区三区69堂 | 精品h| 精品久久久无码中文字幕边打电话 | 欧美日韩不卡合集视频 | 污视频网站免费看 | 久久国内视频 | 五月婷婷久 | www.18av| 日韩区在线 | 中文在线www | 就是喜欢被他干 | 伊人www| 午夜偷拍福利 | 免费一级大片 | 高清在线一区二区 | 国产一区二区三区乱码 | 逼逼av网站 | 欧美一级在线 | 日本一区二区三区视频在线 | 黑帮大佬和我的三百六十五天 | 亚洲黄色一区二区三区 | 欧美午夜剧场 | 一区二区三区入口 | 麻豆影音| 日日噜噜噜夜夜爽爽狠狠 | 狠狠撸狠狠操 | 亚洲国产成人自拍 | 欧美亚洲二区 | 成人美女免费网站视频 | 91成人在线 | 成人黄色av| 超碰cc| 97色资源| 久久综合久久久久 | 韩国三级av | 日本久色 | 久草99 | 日本久久中文字幕 | 日韩av在线免费观看 | 久草热播 | 后进极品美女白嫩翘臀 | 国产一区二区在线观看视频 | 水牛影视av一区二区免费 | 你懂的视频网站 | 一区二区美女 | 成人av手机在线观看 | 欧美精品久 | 亚洲成人自拍视频 | 欧美日韩二区三区 | 精品亚洲成人 | 久久中文字幕精品 | 丰满饥渴老女人hd | 国产宾馆实践打屁股91 | 嫩草网站入口 | 九一毛片 | 欧美日韩国产高清视频 | 国产私人影院 | 夜久久久| 综合 欧美 亚洲日本 | 亚洲美女av在线 | 亚洲综合射 | 国产精品视频免费观看 | 日韩久久久久久久久 | 亚洲1页| 国产一区二区在线看 | 午夜神马福利 | 无套内谢88av免费看 | 欧美黄色精品 | 国产制服91一区二区三区制服 | 就去吻综合 | 国产精品美女久久久久av爽 | 日本中文在线 | 亚洲看看 | 欧美看片 | 成人激情综合 | 国产精品成人aaaa在线 | 国产精品一区二区三区免费观看 | 麻豆av一区二区三区在线观看 | 国产1级片 | 97欧美| 五月婷婷亚洲 | 91成人福利视频 | 亚洲影院一区 | 国产做受高潮动漫 | 久久久久性色av无码一区二区 | 色校园| 欧美brazzers | 日韩精品一区在线观看 | 午夜一区二区三区在线 | 嫩草一区 | 欧美无砖砖区免费 | 无码一区二区三区免费视频 | 女儿的朋友4在线观看 | 99国产精品久久久久 | 2020自拍偷拍 | 久久午夜无码鲁丝片 |