一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

二維碼Java開發(fā)(筆記)

 quasiceo 2014-11-13
分類: java 2014-07-01 13:42 136人閱讀 評論(0) 收藏 舉報
1、常見二維碼碼制

 
2、常用二維碼:


 QR Code  PDF417 漢信碼





3、常用二維碼對比(QR、PDF417、DM、漢信碼)


 

 

QR(日)

PDF417(美)

DM(韓)

漢信碼(中)

備注

發(fā)明時間

 

1994年

1992年

1989年

2005年

 

是否中國國家標(biāo)準(zhǔn)

 

 

是否國際標(biāo)準(zhǔn)

 

 

面積

(mm*mm)

最小

21*21

90*9

10*10

有84個版本供自主選擇,最小碼僅有指甲大小

 

 

最大

177*177

853*270

144*144

 

 

信息存儲量

 

最小

 

 

字節(jié)/平方英寸

2953(7%糾錯信息)

1106(0.2%糾錯信息)

1556(14%糾錯信息)

4350

 

 

數(shù)字

4296

2710

3116

7829

 

 

字符

7089

1850

235

4350

 

 

漢字

1817

 

 

2174

 

 

二進(jìn)制

2953

1556

 

3262

 

糾錯能力

糾錯分級

4級

9

非離散分級

4級

糾錯能力越強,可以存儲的有效信息越少

 

最高糾錯信息

30%

46.20%

25%

30%

 

 

最低糾錯信息

7%

0.20%

14%

8%

 

表示中文

 

優(yōu)

一般

優(yōu)

 

解碼速度

 

一般

 

抗畸變、污損能力

 

較弱

一般

超強

 

識別方向性

 

全方向性

單方向

單方向

全方向性

 

識別設(shè)備

 

支持手機、PAD、攝像頭

限專用設(shè)備

支持手機、PAD、攝像頭

限專用設(shè)備

目前大部分手機二維碼軟件僅支持QR碼



結(jié)論:上述資料中,最重要的一條“目前大部分手機二維碼軟件僅支持QR碼”。所以,碼制方式選用QR

4、QR碼資。QRcode官網(wǎng)(中文):http://www./zh/

參考鏈接:http://kjah./blog/1567490  (樓主對該資料進(jìn)行擴充及修改)

QR二維碼是目前最常用二維碼

是把字符串編碼后通過二維圖片的黑白兩色模塊顯示出來

可表示的字符串長度和 容錯率(ECC) 顯示編碼模式(EncodeMode)及版本(Version)有關(guān)

容錯率共四檔:

L 7%
M 15%
Q 25%
H 30%

注:7% --> 7%的字碼可被修正。

QR碼有容錯能力,QR碼圖形如果有破損,仍然可以被機器讀取內(nèi)容,最高可以到7%~30%面積破損仍可被讀取。

 編碼模式:

Numeric             數(shù)字

Alphanumeric        英文字母

Binary              二進(jìn)制

Kanji             漢字

版本(Version):

1-40 共40個版本

1       21x21模塊

40     177x177模塊

每增加一個版本每邊增加4個模塊 ,如: 版本2 為25x25模塊

以下幾張圖片是字符串'www.sohu.com'的二維碼使用了不同的版本的效果

 

 版本1   版本3    版本7  版本10 版本40



5、QR碼具體java代碼。


可以通過以下方法設(shè)置容錯、編碼模式、版本

setQrcodeErrorCorrect  L M Q H

setQrcodeEncodeMode      N數(shù)字 A英文 其他為Binary

setQrcodeVersion              不設(shè)置會自動選擇適當(dāng)?shù)陌姹?/p>

這個庫只是通過calQrcode方法返回表示二維碼的數(shù)組,圖像需要自己處理

boolean[][] s = testQrcode.calQrcode(d);


通過開源的java 程序生成二維碼。

1、SwetakeQRCode 一個日本人寫的。

2、google開源 ZXing。


參考鏈接:http://ylq365./blog/1160635


1)SwetakeQRCode Demo(創(chuàng)建二維碼以及解析二維碼):


需要的jar包:http://download.csdn.net/detail/wojiao555555/7578417


類:QRCodeSwetakeDemo.java

  1. package ljk.QRcode.swetake;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.Graphics2D;  
  5. import java.awt.geom.AffineTransform;  
  6. import java.awt.image.BufferedImage;  
  7. import java.io.File;  
  8. import java.io.IOException;  
  9.   
  10. import javax.imageio.ImageIO;  
  11.   
  12. import jp.sourceforge.qrcode.QRCodeDecoder;  
  13. import jp.sourceforge.qrcode.exception.DecodingFailedException;  
  14.   
  15. import com.swetake.util.Qrcode;  
  16.   
  17. /** 
  18.  * 二維碼生成demo 使用 swetake開源工具 
  19.  *  
  20.  * link:http://blog.csdn.net/wojiao555555/article/details/36184705  
  21.  */  
  22. public class QRCodeSwetakeDemo {  
  23.   
  24.     public static void main(String args[]) throws Exception{  
  25.           
  26.         String sms = "http://www.";  
  27.         String filePath = "C:\\Users\\Administrator\\Desktop\\QRcode124.png";  
  28.           
  29.         //QR碼是正方形的,所以最好寬度和高度值相同  
  30.         int width = 500;  
  31.         int height = 500;  
  32.           
  33.         createrImage(sms, filePath, width, height);  
  34.           
  35.         String decodeMsg = decoderImage(filePath);  
  36.         System.out.println("二維碼內(nèi)容為:"+decodeMsg);  
  37.     }  
  38.   
  39.       
  40.     /** 
  41.      * 創(chuàng)建二維碼 
  42.      *  
  43.      * @param sms_info  信息內(nèi)容        如:www. 
  44.      * @param filePath  輸出路徑        如:"C:\\Users\\Administrator\\Desktop\\QRcode124.png" 
  45.      * @param width     寬度          生成二維碼的寬度 
  46.      * @param height    高度          生成二維碼的高度 
  47.      * @throws Exception 
  48.      */  
  49.     public static void createrImage(String sms_info,String filePath,int width,int height) throws Exception {  
  50.         try {  
  51.             Qrcode testQrcode = new Qrcode();  
  52.             testQrcode.setQrcodeErrorCorrect('M');//設(shè)置錯誤容錯率     L(7%) M(15%) Q(25%) H(30%)    
  53.             testQrcode.setQrcodeEncodeMode('B');//設(shè)置編碼模式    N數(shù)字 A英文 其他為Binary (設(shè)置為A的時候生成的二維碼異常)  
  54.             testQrcode.setQrcodeVersion(7);//設(shè)置版本 (1~40)  
  55.             String testString = sms_info;  
  56.             byte[] d = testString.getBytes("UTF-8");  
  57.             System.out.println("信息編碼后長度:"+d.length);  
  58.   
  59.             // 限制最大字節(jié)數(shù)為120。容錯率、編碼模式、版本 這幾個參數(shù)決定了這個二維碼能存儲多少字節(jié)。  
  60.             if (d.length > 0 && d.length < 120) {  
  61.                 boolean[][] s = testQrcode.calQrcode(d);  
  62.                 BufferedImage bi = new BufferedImage(s.length, s[0].length,  
  63.                         BufferedImage.TYPE_BYTE_BINARY);  
  64.                 Graphics2D g = bi.createGraphics();  
  65.                 g.setBackground(Color.WHITE);  
  66.                 g.clearRect(00, s.length, s[0].length);  
  67.                 g.setColor(Color.BLACK);  
  68.                 int mulriple=1// 1像素  
  69.                 for (int i = 0; i < s.length; i++) {  
  70.                     for (int j = 0; j < s.length; j++) {  
  71.                         if (s[j][i]) {  
  72.                             g.fillRect(j * mulriple, i * mulriple, mulriple, mulriple);  
  73.                         }  
  74.                     }  
  75.                 }  
  76.                 g.dispose();//釋放此圖形的上下文以及它使用的所有系統(tǒng)資源。調(diào)用 dispose 之后,就不能再使用 Graphics 對象。  
  77.                 bi.flush();  
  78.                 File f = new File(filePath);  
  79.                 if (!f.exists()) {  
  80.                     f.createNewFile();  
  81.                 }  
  82.                   
  83.                 // 圖像縮放  
  84.                 bi=resize(bi,width,height);  
  85.                   
  86.                 // 創(chuàng)建圖片  
  87.                 ImageIO.write(bi, "png", f);  
  88.             }else {  
  89.                 System.out.println("信息編碼后長度過長,請升高版本值(比如 testQrcode.setQrcodeVersion(10)),或降低容錯率(比如:testQrcode.setQrcodeErrorCorrect(L))");  
  90.             }  
  91.         }  
  92.         catch (Exception e) {  
  93.             e.printStackTrace();  
  94.         }  
  95.           
  96.     }  
  97.       
  98.      /**   
  99.      * 圖像縮放   
  100.      * @param source   
  101.      * @param targetW   
  102.      * @param targetH   
  103.      * @return   
  104.      */  
  105.     public static BufferedImage resize(BufferedImage source, int targetW,  
  106.             int targetH) {  
  107.         int type = source.getType();  
  108.         BufferedImage target = null;  
  109.         double sx = (double) targetW / source.getWidth();  
  110.         double sy = (double) targetH / source.getHeight();  
  111.         target = new BufferedImage(targetW, targetH, type);  
  112.         Graphics2D g = target.createGraphics();  
  113.         g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));  
  114.         g.dispose();  
  115.         return target;  
  116.     }  
  117.       
  118.     /** 
  119.      * 解析二維碼 
  120.      * @param imgPath   二維碼路徑 
  121.      * @return          二維碼內(nèi)容 
  122.      */  
  123.     public static String decoderImage(String imgPath){  
  124.         File imageFile = new File(imgPath);  
  125.         BufferedImage bufImg = null;  
  126.         String content = null;  
  127.         try {  
  128.             bufImg = ImageIO.read(imageFile);  
  129.             QRCodeDecoder decoder = new QRCodeDecoder();    
  130.              content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "UTF-8");     
  131.         } catch (IOException e) {    
  132.             System.out.println("Error: " + e.getMessage());    
  133.             e.printStackTrace();    
  134.         } catch (DecodingFailedException dfe) {    
  135.             System.out.println("Error: " + dfe.getMessage());    
  136.             dfe.printStackTrace();    
  137.         }    
  138.         return content;    
  139.     }     
  140. }  

類:TwoDimensionCodeImage.java

  1. package ljk.QRcode.swetake;  
  2.   
  3. import java.awt.image.BufferedImage;  
  4.   
  5. import jp.sourceforge.qrcode.data.QRCodeImage;  
  6.   
  7. public class TwoDimensionCodeImage implements QRCodeImage {  
  8.   
  9.     BufferedImage bufImg;  
  10.       
  11.     public TwoDimensionCodeImage(BufferedImage bufImg) {  
  12.         this.bufImg = bufImg;  
  13.     }  
  14.       
  15.     @Override  
  16.     public int getHeight() {  
  17.         return bufImg.getHeight();  
  18.     }  
  19.   
  20.     @Override  
  21.     public int getPixel(int x, int y) {  
  22.         return bufImg.getRGB(x, y);  
  23.     }  
  24.   
  25.     @Override  
  26.     public int getWidth() {  
  27.         return bufImg.getWidth();  
  28.     }  
  29.   
  30. }  


生成的二維碼:

尺寸:500 X 500 像素。



2)ZXingQRCode Demo(創(chuàng)建二維碼以及解析二維碼):


優(yōu)點:


qrcode有1-40個version

version愈大,容錯越高,像素愈多
qrcode的api把version給屏蔽掉了。
 
它自己根據(jù)輸入的文字量和容錯級別,
算出來需要多少bit來存數(shù)據(jù)。
然后循環(huán)所有的version,
看哪個能放下這么多字,就用哪個version。
這樣的話,優(yōu)勢是生成的qrcode一直最小。

一個牛掰的作者生成的二維碼鏈接:http://blog.csdn.net/kimmking/article/details/8244552


參考鏈接:http://blog.csdn.net/yangdong0906/article/details/8558871

ZXing jar包獲取步驟:http://blog.csdn.net/chonbj/article/details/17913577

http://www.cnblogs.com/tankaixiong/archive/2010/10/31/1865807.html

jar包簡化:http://www.cnblogs.com/keyindex/archive/2011/06/08/2074900.html




需要的jar包:http://download.csdn.net/detail/wojiao555555/7606799

類:QRCodeZXingDemo.java

  1. package ljk.QRcode.ZXing.ok;  
  2.   
  3. import java.awt.Graphics2D;  
  4. import java.awt.image.BufferedImage;  
  5. import java.io.File;  
  6. import java.io.IOException;  
  7. import java.util.Hashtable;  
  8.   
  9. import javax.imageio.ImageIO;  
  10.   
  11. import ljk.QRcode.ZXing.addImage.MatrixToImageConfigEx;  
  12. import ljk.QRcode.ZXing.addImage.MatrixToImageWriterEx;  
  13.   
  14. import com.google.zxing.BarcodeFormat;  
  15. import com.google.zxing.EncodeHintType;  
  16. import com.google.zxing.MultiFormatWriter;  
  17. import com.google.zxing.WriterException;  
  18. import com.google.zxing.client.j2se.MatrixToImageWriter;  
  19. import com.google.zxing.common.BitMatrix;  
  20. import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;  
  21.   
  22. /** 
  23.  * @Description 二維碼demo 包含生成、解析、生成帶logo圖片的二維碼。 
  24.  * @version 1.0 2014-07-03 
  25.  * @author LJK 
  26.  */  
  27. public class QRCodeZXingDemo {  
  28.     public QRCodeZXingDemo() {}  
  29.       
  30.     /** 
  31.      * @Title: createQRCode  
  32.      * @Description: 生成二維碼圖片 
  33.      * @param @param content        二維碼文字內(nèi)容 
  34.      * @param @param width          二維碼圖片寬度 
  35.      * @param @param height         二維碼圖片高度 
  36.      * @param @param imageSavePath  二維碼圖片保存路徑 
  37.      * @param @param imgFormat      二維碼圖片格式, jpg/png 等 
  38.      * @param @throws IOException 
  39.      * @return void 
  40.      * @throws 
  41.      */  
  42.     public void createQRCode(String content, int width, int height, String imageSavePath, String imgFormat) throws IOException{  
  43.         Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();  
  44.         hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
  45.           
  46.         //指定錯誤糾正級別  共四個級別:  
  47.         /* 
  48.             L       7% 
  49.             M       15%  
  50.             Q       25%  
  51.             H       30%     
  52.          */  
  53.         hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); //互聯(lián)網(wǎng)應(yīng)用二維碼不會破損,L容錯即可,易識別  
  54.         BitMatrix matrix = null;  
  55.         try {  
  56.             //BarcodeFormat.QR_CODE:設(shè)置條行碼類型  
  57.             /* 
  58.                 支持如下幾種條形碼 
  59.                 public static final BarcodeFormat AZTEC; 
  60.                 public static final BarcodeFormat CODABAR; 
  61.                 public static final BarcodeFormat CODE_39; 
  62.                 public static final BarcodeFormat CODE_93; 
  63.                 public static final BarcodeFormat CODE_128; 
  64.                 public static final BarcodeFormat DATA_MATRIX; 
  65.                 public static final BarcodeFormat EAN_8; 
  66.                 public static final BarcodeFormat EAN_13; 
  67.                 public static final BarcodeFormat ITF; 
  68.                 public static final BarcodeFormat MAXICODE; 
  69.                 public static final BarcodeFormat PDF_417; 
  70.                 public static final BarcodeFormat QR_CODE; 
  71.                 public static final BarcodeFormat RSS_14; 
  72.                 public static final BarcodeFormat RSS_EXPANDED; 
  73.                 public static final BarcodeFormat UPC_A; 
  74.                 public static final BarcodeFormat UPC_E; 
  75.                 public static final BarcodeFormat UPC_EAN_EXTENSION; 
  76.              */  
  77.             matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);  
  78.             writeToFile(matrix, imgFormat, imageSavePath);  
  79.         } catch (WriterException e) {  
  80.             e.printStackTrace();  
  81.         }  
  82.     }  
  83.       
  84.     /** 
  85.      * @Title: createQrCode  
  86.      * @Description: 生成二維碼圖片,并添加 logo (logo自動縮放為 二維碼圖片的 1/4大?。咀⒁狻勘M量不要使用黑白logo,影響識別。 
  87.      * @param @param content        二維碼內(nèi)容 
  88.      * @param @param width          二維碼寬度 
  89.      * @param @param height         二維碼高度 
  90.      * @param @param imageSavePath  二維碼保存路徑 
  91.      * @param @param imgFormat      二維碼圖片格式, jpg/png 等 
  92.      * @param @param logoPath       logo 路徑 
  93.      * @return void 
  94.      * @throws 
  95.      */  
  96.     public void createQrCode(String content, int width, int height, String imageSavePath, String imgFormat, String logoPath){  
  97.         Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();  
  98.         hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
  99.         hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //之后要破壞圖片添加logo,所以容錯率調(diào)高(H),防止不能識別。  
  100.           
  101.         BitMatrix matrix = null;  
  102.         try {  
  103.             matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);  
  104.             writeToFile(matrix, imgFormat, imageSavePath, logoPath);  
  105.         } catch (WriterException e) {  
  106.             e.printStackTrace();  
  107.         }  
  108.     }  
  109.   
  110.     /** 
  111.      * @Title: writeToFile  
  112.      * @Description: 寫出二維碼到磁盤,包含logo 
  113.      * @param @param matrix         二維碼 bit矩陣 
  114.      * @param @param imgFormat      二維碼圖片格式, jpg/png 等 
  115.      * @param @param imageSavePath  二維碼保存路徑 
  116.      * @param @param logoPath       logo 路徑 
  117.      * @return void 
  118.      * @throws 
  119.      */  
  120.     public void writeToFile(BitMatrix matrix, String imgFormat,String imageSavePath, String logoPath) {  
  121.         try {  
  122.             //寫出圖片  
  123.             BufferedImage image = writeToFile(matrix, imgFormat, imageSavePath);  
  124. //          //添加logo  
  125.             MatrixToImageWriterExtend.overlapImage(image, imageSavePath, logoPath, imgFormat);  
  126.         } catch (IOException e) {  
  127.             e.printStackTrace();  
  128.         }  
  129.     }  
  130.   
  131.     /** 
  132.      * @Title: writeToFile  
  133.      * @Description: 寫出圖片到磁盤 
  134.      * @param @param matrix         二維碼 bit 矩陣 
  135.      * @param @param imgFormat      二維碼圖片格式,jpg/png 等 
  136.      * @param @param imageSavePath  二維碼保存路徑 
  137.      * @param @throws IOException    
  138.      * @return BufferedImage        二維碼緩存 
  139.      * @throws 
  140.      */  
  141.     public BufferedImage writeToFile(BitMatrix matrix, String imgFormat,  
  142.             String imageSavePath) throws IOException {  
  143.         File file = new File(imageSavePath);  
  144.         BufferedImage image = MatrixToImageWriterExtend.writeToFile(matrix, imgFormat, file);  
  145.         return image;  
  146.     }  
  147.       
  148.     /** 
  149.      * @Title: main  
  150.      * @Description: 測試 
  151.      * @param @param args 
  152.      * @return void 
  153.      * @throws 
  154.      */  
  155.     public static void main(String[] args) {  
  156.         String content = "http://www.";  
  157.         String imageSavePath = "C:/Users/Administrator/Desktop/testode.png";  
  158.         String logoPath = "C:/Users/Administrator/Desktop/logo2.jpg";  
  159.         String imgFormat = "png";  
  160.         int width = 200;  
  161.         int height = 200;  
  162.           
  163.         QRCodeZXingDemo qrCode = new QRCodeZXingDemo();  
  164.         try {  
  165.             //寫出二維碼  
  166. //          qrCode.createQRCode(content, width, height, imageSavePath, imgFormat);  
  167.             //寫出帶logo 的二維碼  
  168.             qrCode.createQrCode(content, width, height, imageSavePath, imgFormat, logoPath);  
  169.         } catch (Exception e) {  
  170.             e.printStackTrace();  
  171.         }  
  172.     }  
  173. }  


類:MatrixToImageWriterExtend.java

  1. package ljk.QRcode.ZXing.ok;  
  2.   
  3. import java.awt.Graphics2D;  
  4. import java.awt.image.BufferedImage;  
  5. import java.io.File;  
  6. import java.io.IOException;  
  7. import java.io.OutputStream;  
  8.   
  9. import javax.imageio.ImageIO;  
  10.   
  11. import com.google.zxing.common.BitMatrix;  
  12.   
  13. /** 
  14.  * @ClassName: MatrixToImageWriterExtend 
  15.  * @Description: 繼承源代碼中 MatrixToImageWriter 類,但該類是final的。所以把方法全部取出構(gòu)建該類。 
  16.  * @author LJK 
  17.  * @date 2014-7-7 下午12:17:50 
  18.  * 
  19.  */  
  20. public class MatrixToImageWriterExtend {  
  21.       
  22.     private static final int BLACK = 0xFF000000;  
  23.     private static final int WHITE = 0xFFFFFFFF;  
  24.   
  25.     private MatrixToImageWriterExtend() {  
  26.     }  
  27.   
  28.     public static BufferedImage toBufferedImage(BitMatrix matrix) {  
  29.         int width = matrix.getWidth();  
  30.         int height = matrix.getHeight();  
  31.         BufferedImage image = new BufferedImage(width, height,  
  32.                 BufferedImage.TYPE_INT_RGB);  
  33.         for (int x = 0; x < width; x++) {  
  34.             for (int y = 0; y < height; y++) {  
  35.                 image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);  
  36.             }  
  37.         }  
  38.         return image;  
  39.     }  
  40.   
  41.     /** 
  42.      * @Title: writeToFile  
  43.      * @Description: ZXing 的源代碼,只不過把 BufferedImage 對象返回了。 
  44.      * @param @param matrix 
  45.      * @param @param format 
  46.      * @param @param file 
  47.      * @param @return 
  48.      * @param @throws IOException 
  49.      * @return BufferedImage 
  50.      * @throws 
  51.      */  
  52.     public static BufferedImage writeToFile(BitMatrix matrix, String format, File file)  
  53.             throws IOException {  
  54.         BufferedImage image = toBufferedImage(matrix);  
  55.         if (!ImageIO.write(image, format, file)) {  
  56.             throw new IOException("Could not write an image of format "  
  57.                     + format + " to " + file);  
  58.         }  
  59.         return image;  
  60.     }  
  61.       
  62.     /** 
  63.      * @Title: overlapImage  
  64.      * @Description:    二維碼添加自定義logo(關(guān)鍵部分) 
  65.      * @param @param image          二維碼緩存 
  66.      * @param @param imgSavePath    二維碼保存路徑 
  67.      * @param @param logoPath       logo 路徑 
  68.      * @param @param formate        二維碼圖片格式,jpg/png 等 
  69.      * @return void 
  70.      * @throws 
  71.      */  
  72.     public static void overlapImage(BufferedImage image, String imgSavePath, String logoPath, String formate) {  
  73.         try {  
  74.             BufferedImage logo = ImageIO.read(new File(logoPath));  
  75.               
  76.             Graphics2D g = image.createGraphics();  
  77.             // logo寬高  
  78.             double logoWidth = logo.getWidth();  
  79.             double logoHeight = logo.getHeight();  
  80.               
  81.             //logo 等比縮放  
  82.             while(logoWidth>image.getWidth()/2.5){  
  83.                 logoWidth /= 1.25;  
  84.                 logoHeight /= 1.25;  
  85.             }  
  86.               
  87.             int width = (int)logoWidth;  
  88.             int height = (int)logoHeight;  
  89.               
  90.             // logo起始位置,此目的是為logo居中顯示  
  91.             int x = (image.getWidth() - width) / 2;  
  92.             int y = (image.getHeight() - height) / 2;  
  93.             g.drawImage(logo, x, y, width, height, null);  
  94.             g.dispose();  
  95.             ImageIO.write(image, formate, new File(imgSavePath));  
  96.         } catch (Exception e) {  
  97.             e.printStackTrace();  
  98.         }  
  99.     }  
  100.   
  101.     public static void writeToStream(BitMatrix matrix, String format,  
  102.             OutputStream stream) throws IOException {  
  103.         BufferedImage image = toBufferedImage(matrix);  
  104.         if (!ImageIO.write(image, format, stream)) {  
  105.             throw new IOException("Could not write an image of format "  
  106.                     + format);  
  107.         }  
  108.     }  
  109. }  



生成的二維碼:

尺寸:500 X 500 像素。

注意:ZXing 生成的二維碼是有白邊的,并且生成圖像哪塊代碼不用自己寫,很方便。



完事了~~


上述demo的地址:http://download.csdn.net/detail/wojiao555555/7606829



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    99热在线播放免费观看| 日韩欧美一区二区亚洲| 亚洲一区二区精品免费视频| 亚洲视频一级二级三级| 久热香蕉精品视频在线播放| 国产又色又爽又黄又大| 亚洲国产精品久久精品成人| 加勒比人妻精品一区二区| 91精品国产综合久久精品| 国产免费人成视频尤物| 亚洲一区二区三区精选| 狠狠做深爱婷婷久久综合| 熟女体下毛荫荫黑森林自拍| 午夜精品在线视频一区| 亚洲欧美日韩熟女第一页| 成人午夜视频在线播放| 国产av乱了乱了一区二区三区| 五月婷婷六月丁香在线观看| 国产成人精品国内自产拍| 国产精品一区二区视频成人| 亚洲精品中文字幕在线视频| 又大又紧又硬又湿又爽又猛| 中文字幕人妻日本一区二区| 精品一区二区三区免费看| 日本久久精品在线观看| 日韩欧美综合中文字幕| 久草热视频这里只有精品| 91日韩在线观看你懂的| 91日韩在线视频观看| 国产一级不卡视频在线观看| 99香蕉精品视频国产版| 亚洲精品一区二区三区日韩| 亚洲精品熟女国产多毛| 九九热精彩视频在线免费| 五月激情综合在线视频| 丝袜破了有美女肉体免费观看| 国产又大又黄又粗的黄色| 亚洲中文字幕视频一区二区| 国产日韩欧美国产欧美日韩| 国内女人精品一区二区三区| 精品香蕉国产一区二区三区|