生活随笔
收集整理的這篇文章主要介紹了
二维码扫描器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在騰訊郵箱中,在附件下載按鈕旁邊有一個二維碼的按鈕,很
好奇,有手機搜狗拼音 自帶的二維碼掃描了一下,然后居然很快的
在手機上顯示了附件下載的連接地址,很是方面。
在網上找了下相關的資料,這篇文章比較好!
我很好奇的是,為什么搜狗不把這么好的二維碼掃描器獨立出來,而要集成到搜狗拼音中去,是技術含量低,還是什么原因??
等忙好了,我想做一個二維碼的掃描器,應該很簡單。
java二維碼生成與解析代碼實現
分類:?java2012-04-24 17:29?
1048人閱讀??
收藏?
舉報
javastringoutputexception存儲input
轉載地址:點擊打開鏈接
二維碼,是一種采用黑白相間的平面幾何圖形通過相應的編碼算法來記錄文字、圖片、網址等信息的條碼圖片。如下圖
二維碼的特點:
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?{??????????????????????public?void?encoderQRCode(String?content,?String?imgPath)?{??????????this.encoderQRCode(content,?imgPath,?"png",?7);??????}??????????????????????public?void?encoderQRCode(String?content,?OutputStream?output)?{??????????this.encoderQRCode(content,?output,?"png",?7);??????}???????????????????????public?void?encoderQRCode(String?content,?String?imgPath,?String?imgType)?{??????????this.encoderQRCode(content,?imgPath,?imgType,?7);??????}???????????????????????public?void?encoderQRCode(String?content,?OutputStream?output,?String?imgType)?{??????????this.encoderQRCode(content,?output,?imgType,?7);??????}????????????????????public?void?encoderQRCode(String?content,?String?imgPath,?String?imgType,?int?size)?{??????????try?{??????????????BufferedImage?bufImg?=?this.qRCodeCommon(content,?imgType,?size);????????????????????????????File?imgFile?=?new?File(imgPath);????????????????????????????ImageIO.write(bufImg,?imgType,?imgFile);??????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??????????}??????}????????????????????public?void?encoderQRCode(String?content,?OutputStream?output,?String?imgType,?int?size)?{??????????try?{??????????????BufferedImage?bufImg?=?this.qRCodeCommon(content,?imgType,?size);????????????????????????????ImageIO.write(bufImg,?imgType,?output);??????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??????????}??????}????????????????????????private?BufferedImage?qRCodeCommon(String?content,?String?imgType,?int?size)?{??????????BufferedImage?bufImg?=?null;??????????try?{??????????????Qrcode?qrcodeHandler?=?new?Qrcode();????????????????????????????qrcodeHandler.setQrcodeErrorCorrect('M');??????????????qrcodeHandler.setQrcodeEncodeMode('B');????????????????????????????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);??????????????????????????????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;??????}??????????????????????public?String?decoderQRCode(String?imgPath)?{????????????????????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;??????}??????????????????????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");??????????????????????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代碼,筆者已經進行了簡單的封裝,方便大家適用不同場合,希望對大家能有所幫助。
總結
以上是生活随笔為你收集整理的二维码扫描器的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。