java中二維碼的使用(一)生成二維碼

生活中隨處可見的二維碼大家都不陌生侍瑟,java中常用的是矩陣式二維碼QRCode蝎毡,生成QRCode有很多現(xiàn)成的工具,這里簡單記一下抛寝。

1.QRCode熊杨,這個是日本人寫的,下載QRCode.jar就可以用了

package com.util;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.imageio.ImageIO;

import com.swetake.util.Qrcode;

public class QrCodeUtil {
    /**
     * 生成二維碼圖片
     * @param content 二維碼內(nèi)容
     * @param imgPath 二維碼圖片的保存路徑
     */
    public static void getQrcodeImg(String content,String imgPath){
        int width=140;
        int height=140;
        //實(shí)例化Qrcode
        Qrcode qrcode=new Qrcode();
        //設(shè)置二維碼的排錯率L(7%) M(15%) Q(25%) H(35%)
        qrcode.setQrcodeErrorCorrect('M');
        qrcode.setQrcodeEncodeMode('B');        
        //設(shè)置二維碼尺寸(1~49)
        qrcode.setQrcodeVersion(7);
        //設(shè)置圖片尺寸
        BufferedImage bufImg=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
        
        //繪制二維碼圖片
        Graphics2D gs=bufImg.createGraphics();
        //設(shè)置二維碼背景顏色
        gs.setBackground(Color.WHITE);
        //創(chuàng)建一個矩形區(qū)域
        gs.clearRect(0, 0, width, height);
        //設(shè)置二維碼的圖片顏色值 黑色
        gs.setColor(Color.BLACK);
        
        //獲取內(nèi)容的字節(jié)數(shù)組,設(shè)置編碼集
        try {
            byte[] contentBytes=content.getBytes("utf-8");
            int pixoff=2;
            //輸出二維碼
            if(contentBytes.length>0&&contentBytes.length<120){
                boolean[][] codeOut=qrcode.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);
                        }
                    }
                }    
            }
            gs.dispose();
            bufImg.flush();
            //生成二維碼圖片
            File imgFile=new File(imgPath);
            ImageIO.write(bufImg, "png", imgFile);
            
            System.out.println("二維碼生成成功盗舰!");
            
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        getQrcodeImg("傻狗", "E:\\qrcode.png");
    }
}

2.ZXing掉奄,google的開源項(xiàng)目晤锹,除了寫二維碼條形碼一維碼什么的也能寫

package com.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

public class ZxingUtil {
        private static final int BLACK = 0xFF000000;  
        private static final int WHITE = 0xFFFFFFFF;  
         
        private ZxingUtil() {  
        }  
      
        public static BufferedImage toBufferedImage(BitMatrix matrix) {  
            int width = matrix.getWidth();  
            int height = matrix.getHeight();  
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
            for (int x = 0; x < width; x++) {  
                for (int y = 0; y < height; y++) {  
                    image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);  
                }  
            }  
            return image;  
        }  
      
        public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {  
            BufferedImage image = toBufferedImage(matrix);  
            if (!ImageIO.write(image, format, file)) {  
                throw new IOException("Could not write an image of format " + format + " to " + file);  
            }  
        }  
      
        public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) throws IOException {  
            BufferedImage image = toBufferedImage(matrix);  
            if (!ImageIO.write(image, format, stream)) {  
                throw new IOException("Could not write an image of format " + format);  
            }  
        }  
        
        public static void main(String[] args) throws WriterException, IOException {
            String text = "榆次丶吳彥祖"; // 二維碼內(nèi)容  
            int width = 300; // 二維碼圖片寬度  
            int height = 300; // 二維碼圖片高度  
            String format = "gif";// 二維碼的圖片格式  
              
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();  
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");   // 內(nèi)容所使用字符集編碼  
              
            BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);  
            // 生成二維碼  
            File outputFile = new File("E:" + File.separator + "zxing.jpg");  
            writeToFile(bitMatrix, format, outputFile);
            System.out.println("生成成功");
        }
}

3.jquery.qrcode插件宋渔,這個也很簡單毁靶,網(wǎng)頁端生成圖片,資源消耗小

頁面引入js文件

<script type="text/javascript" src="<%=basePath %>/js/jquery.min.js"></script>
<script type="text/javascript" src="<%=basePath %>/js/jquery.qrcode.min.js"></script>```
寫js

(function(){('#qrcode').qrcode("http://www.baidu.com");
}); ```
-end-

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛮位,一起剝皮案震驚了整個濱河市较沪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌土至,老刑警劉巖购对,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陶因,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)垂蜗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門楷扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解幽,“玉大人,你說我怎么就攤上這事烘苹《阒辏” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵镣衡,是天一觀的道長霜定。 經(jīng)常有香客問我,道長廊鸥,這世上最難降的妖魔是什么望浩? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮惰说,結(jié)果婚禮上磨德,老公的妹妹穿的比我還像新娘。我一直安慰自己吆视,他們只是感情好典挑,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啦吧,像睡著了一般您觉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上授滓,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天琳水,我揣著相機(jī)與錄音,去河邊找鬼褒墨。 笑死炫刷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郁妈。 我是一名探鬼主播浑玛,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼噩咪!你這毒婦竟也來了顾彰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤胃碾,失蹤者是張志新(化名)和其女友劉穎涨享,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仆百,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厕隧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吁讨。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡髓迎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出建丧,到底是詐尸還是另有隱情排龄,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布翎朱,位于F島的核電站橄维,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拴曲。R本人自食惡果不足惜争舞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疗韵。 院中可真熱鬧兑障,春花似錦、人聲如沸蕉汪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽者疤。三九已至福澡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驹马,已是汗流浹背革砸。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糯累,地道東北人算利。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像泳姐,于是被迫代替她去往敵國和親效拭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容