[Java]如何產生Qrocde二維條碼?
QRCode二維條碼,是Quick Response Code縮寫,來自日本的國際二維條碼標準,是在1994年由日本Denso-Wave公司所發明的,此公司並保有版權但並不行使版權,所以在使用QRCode上並沒有版權上的問題。QRCode的應用像是購物消費、資料查詢、名片交換等等,在日本使用上是十分常見的,而台灣在近幾年也開始流行了起來。
更詳細的QRCode介紹可以參考Wiki QR碼或是 行動條碼 / 二維碼 / Mobile Barcode / QRCode。
要利用Java來產生QRCode可以使用swetake所開放出來的原始碼http://www.swetake.com/qr/index-e.html,有php、ruby及Java等版本,下載點qrcode_java0.50beta10.tar.gz ,下載後解壓縮,可以直接把lib目錄下的QRcode.jar直接引用到程式classpath裡就可以了,或著把所有src目錄裡的java檔copy到專案source目錄裡也可。
Eclipse的配置如下圖

如何使用swetake來產生QRCode,主要的程式碼如下:
此程式主要在產生QRCode的方塊內容,其中字串str為要放入二維條碼內的資料,如果需要輸出成檔案格式則可使用return後面所保留的程式碼使用ImageIO.write來寫入檔案。
package yku.qrcode; import java.awt.*; import java.awt.image.*; //import javax.imageio.*; public class EnCodeTest { public BufferedImage makeqrcode() { // 設定圖檔寬度 140*140 BufferedImage bi = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB); try { // Constructor Qrcode Object com.swetake.util.Qrcode testQrcode = new com.swetake.util.Qrcode(); //容錯率L M Q H testQrcode.setQrcodeErrorCorrect('M'); //字元模式,N A 或其它的A是英文,N是數字,其它是8 byte testQrcode.setQrcodeEncodeMode('B'); //可使用的字串長短跟所設定的QrcodeVersion有關,越大可設定的字越多 //0-40,0是自動 testQrcode.setQrcodeVersion(7); // 設定QR Code 編碼內容 String str = "123\r\n"; str = str + "哈哈哈 .\n"; str = str + "看的到我寫什麼嘛\n"; str = str + "我是yku啦"; // 把字串變成byte陣列 byte[] d = str.getBytes("Utf-8"); // createGraphics Graphics2D g = (Graphics2D) bi.getGraphics(); // set background g.setBackground(Color.WHITE); g.clearRect(0, 0, 140, 140); // 設定字型顏色 => BLACK g.setColor(Color.BLACK); // 轉出 Bytes if (d.length > 0 && d.length < 120) { boolean[][] s = testQrcode.calQrcode(d); for (int i = 0; i < s.length; i++) { for (int j = 0; j < s.length; j++) { if (s[j][i]) { g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3); } } } } g.dispose(); // bi.flush(); // 如需輸出成檔案可利用以下方式 // 設定 產生檔案路徑 // String FilePath="c:\\TestQRCode.svg"; // File f = new File(FilePath); // 產生TestQRCode JPG File // ImageIO.write(bi, "jpg", f); } // end try catch (Exception e) { e.printStackTrace(); } // end catch return bi; } }
此程式是產生一個QRCode圖型的BufferedImage,再把BufferedImage資料利用MediaTracker載入(Applet程式一定要使用此方法,Application則可用可不用),然後利用paint函數把圖檔drawImage到JPanel上去。
package yku.qrcode; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JFrame; //import java.awt.Dimension; public class GUIDisplay extends JFrame { public static void main(String args[]) { GUIDisplay d = new GUIDisplay(); d.setVisible(true); } private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private java.awt.image.BufferedImage image = null; /** * This is the default constructor */ public GUIDisplay() { super(); initialize(); EnCodeTest qrcode = new EnCodeTest(); try { java.awt.MediaTracker mt = new java.awt.MediaTracker(this); // for Applet, change the method to retrieve the image // and of course use your own image! image = qrcode.makeqrcode(); mt.addImage(image, 0); mt.waitForID(0); } catch (Exception e) { e.printStackTrace(); } } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(300, 307); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); } return jContentPane; } public void update(java.awt.Graphics g) { paint(g); } public void paint(java.awt.Graphics g) { if (image != null) { g.drawImage(image, 20, 50, this); } else { g.clearRect(0, 0, getSize().width, getSize().height); } } } // @jve:decl-index=0:visual-constraint="10,10"
結果畫面:

原始碼下載:
相關資料:
產生QRCode(EnCode)網站有:
- kaywa
- QuickMark (可編4種碼:QuickMark、QRCode、Datamatrix Mobile、中移QR碼)
- Online QR Code Generator
解讀QRCode(DeCode)網站或設備:
- 手機版QR碼解碼軟體
- QR Code Reader Windows版/Moblin版/Android版 QR碼及漢信碼解碼軟體下載
一個回應 to “[Java]如何產生Qrocde二維條碼?”
PingBack List:
留下您想說的話: