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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]java二维码生成与解析代码实现

發布時間:2024/4/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]java二维码生成与解析代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:點擊打開鏈接

二維碼,是一種采用黑白相間的平面幾何圖形通過相應的編碼算法來記錄文字、圖片、網址等信息的條碼圖片。如下圖

二維碼的特點:

1.? 高密度編碼,信息容量大

可容納多達1850個大寫字母或2710個數字或1108個字節,或500多個漢字,比普通條碼信息容量約高幾十倍。

2.? 編碼范圍廣

該條碼可以把圖片、聲音、文字、簽字、指紋等可以數字化的信息進行編碼,用條碼表示出來;可以表示多種語言文字;可表示圖像數據。

3.? 容錯能力強,具有糾錯功能

這使得二維條碼因穿孔、污損等引起局部損壞時,照樣可以正確得到識讀,損毀面積達50%仍可恢復信息。

4.? 譯碼可靠性高

它比普通條碼譯碼錯誤率百萬分之二要低得多,誤碼率不超過千萬分之一。

5.? 可引入加密措施

保密性、防偽性好。

6.? 成本低,易制作,持久耐用

正因為以上這些特點,二維碼現在越來越流行,應用也是越來越廣(詳細了解請見百度百科,介紹不是本篇重點),所以掌握如何開發二維碼是非常不錯的知識儲備,因此本篇博文將為大家講解如何生成、解析二維碼。

?

所需jar包:QRCode.jar

http://download.csdn.net/detail/wangpeng047/4008532

?

TwoDimensionCode類:二維碼操作核心類

?

[java]?view plaincopy
  • package?qrcode;??
  • ??
  • 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,?7);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?生成二維碼(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?=?"G:/TDDOWNLOAD/Michael_QRCode.png";??
  • ????????String?encoderContent?=?"Hello?大大、小小,welcome?to?QRCode!"?+?"\nMyblog?[?http://sjsky.iteye.com?]"?+?"\nEMail?[?sjsky007@gmail.com?]";??
  • ????????TwoDimensionCode?handler?=?new?TwoDimensionCode();??
  • ????????handler.encoderQRCode(encoderContent,?imgPath,?"png");??
  • //??????try?{??
  • //??????????OutputStream?output?=?new?FileOutputStream(imgPath);??
  • //??????????handler.encoderQRCode(content,?output);??
  • //??????}?catch?(Exception?e)?{??
  • //??????????e.printStackTrace();??
  • //??????}??
  • ????????System.out.println("========encoder?success");??
  • ??????????
  • ??????????
  • ????????String?decoderContent?=?handler.decoderQRCode(imgPath);??
  • ????????System.out.println("解析結果如下:");??
  • ????????System.out.println(decoderContent);??
  • ????????System.out.println("========decoder?success!!!");??
  • ????}??
  • }??

  • TwoDimensionCodeImage?類:二維碼圖片對象

    ?

    ?

    [java]?view plaincopy
  • package?qrcode;??
  • ??
  • 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();??
  • ????}??
  • ??
  • }??

  • 上面的java代碼,筆者已經進行了簡單的封裝,方便大家適用不同場合,希望對大家能有所幫助。

    轉載于:https://www.cnblogs.com/gangben/p/4387584.html

    總結

    以上是生活随笔為你收集整理的[转]java二维码生成与解析代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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