QRcode二維碼生成

二維碼生成需要借助第三方j(luò)ar包浮禾。我這里使用的是QRcode。給大家一個(gè)連接尺借,自行下載:http://download.csdn.net/detail/xiaokui_wingfly/7957815

生成二維碼代碼:

    public void encoderQRCoder(String content, HttpServletResponse response) {
        try {
            Qrcode handler = new Qrcode();
            handler.setQrcodeErrorCorrect('M');
            handler.setQrcodeEncodeMode('B');
            handler.setQrcodeVersion(7);
            byte[] contentBytes = content.getBytes("UTF-8");

            BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
            Graphics2D gs = bufImg.createGraphics();

            gs.setBackground(Color.WHITE);
            gs.clearRect(0, 0, 140, 140);

            //設(shè)定圖像顏色:BLACK
            gs.setColor(Color.BLACK);

            //設(shè)置偏移量  不設(shè)置肯能導(dǎo)致解析出錯(cuò)
            int pixoff = 2;
            //輸出內(nèi)容:二維碼
            if (contentBytes.length > 0 && contentBytes.length < 124) {
                boolean[][] codeOut = handler.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 {
                System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");
            }
            gs.dispose();
            bufImg.flush();
            OutputStream outputStream = response.getOutputStream();
            ImageIO.write(bufImg, "PNG", outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

第一個(gè)參數(shù)是鏈接的內(nèi)容绊起,比如:https://www.baidu.com
第二個(gè)是HttpServletResponse,為什么要傳這個(gè)參數(shù)呢燎斩,我是讓二維碼直接顯示到j(luò)sp中虱歪,在jsp頁(yè)面,定義:

<i mg  src="code">

code是我servlet,讓src指向這個(gè)servlet瘫里。好吧实蔽,可能我表達(dá)的不夠清除,我把完整代碼貼一下:

public class CodeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public CodeServlet() {
        super();
    }
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.service(arg0, arg1);
        String content = "http://www.baidu.com";  
        encoderQRCoder(content, arg1);  
    }
    
    public void encoderQRCoder(String content, HttpServletResponse response) {  
        try {  
            
            Qrcode handler = new Qrcode();  
            handler.setQrcodeErrorCorrect('M');  
            handler.setQrcodeEncodeMode('B');  
            handler.setQrcodeVersion(-1);  
              
            System.out.println(content);  
            byte[] contentBytes = content.getBytes("UTF-8");  
              
            BufferedImage bufImg = new BufferedImage(80, 80, BufferedImage.TYPE_INT_RGB);  
              
            Graphics2D gs = bufImg.createGraphics();  
              
            gs.setBackground(Color.WHITE);  
            gs.clearRect(0, 0, 140, 140);  
              
            //設(shè)定圖像顏色:BLACK  
            gs.setColor(Color.BLACK);  
              
            //設(shè)置偏移量  不設(shè)置肯能導(dǎo)致解析出錯(cuò)  
            int pixoff = 2;  
            //輸出內(nèi)容:二維碼  
            if(contentBytes.length > 0 && contentBytes.length < 124) {  
                boolean[][] codeOut = handler.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 {  
                System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");  
            }  
              
            gs.dispose();  
            bufImg.flush();  
            response.reset();
            //生成二維碼QRCode圖片  
            OutputStream outputStream = response.getOutputStream();
            ImageIO.write(bufImg, "png", outputStream);
            outputStream.close();
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

}
 <servlet>  
    <servlet-name>CodeService</servlet-name>  
    <servlet-class>com.webgo.servlets.CodeServlet</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>CodeService</servlet-name>  
    <url-pattern>/code</url-pattern>  
  </servlet-mapping>  

注意:當(dāng)二維碼出現(xiàn)顯示不全的情況谨读,
BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
修改BufferedImage的兩個(gè)140,140參數(shù),通常和gs.clearRect(0, 0, 140, 140);一致就ok坛吁。

筆者能力有限劳殖,不足之處歡迎指出!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拨脉,一起剝皮案震驚了整個(gè)濱河市哆姻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玫膀,老刑警劉巖矛缨,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異帖旨,居然都是意外死亡箕昭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)解阅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)落竹,“玉大人,你說(shuō)我怎么就攤上這事货抄∈稣伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵蟹地,是天一觀的道長(zhǎng)积暖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)怪与,這世上最難降的妖魔是什么夺刑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上性誉,老公的妹妹穿的比我還像新娘窿吩。我一直安慰自己,他們只是感情好错览,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布纫雁。 她就那樣靜靜地躺著,像睡著了一般倾哺。 火紅的嫁衣襯著肌膚如雪轧邪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天羞海,我揣著相機(jī)與錄音忌愚,去河邊找鬼。 笑死却邓,一個(gè)胖子當(dāng)著我的面吹牛硕糊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腊徙,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼简十,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撬腾?” 一聲冷哼從身側(cè)響起螟蝙,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎民傻,沒(méi)想到半個(gè)月后胰默,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漓踢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年牵署,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彭雾。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碟刺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薯酝,到底是詐尸還是另有隱情半沽,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布吴菠,位于F島的核電站者填,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏做葵。R本人自食惡果不足惜占哟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榨乎,春花似錦怎燥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肛捍,卻和暖如春隐绵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拙毫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工依许, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缀蹄。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓峭跳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缺前。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坦康,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359