標籤:return 合成 getheight 技術分享 png exists try object i++
這個例子需要使用google的開源項目zxing的核心jar包
core-3.2.0.jar
可以百度搜尋下載jar檔案
也可使用maven添加依賴
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency>
最簡單的產生二維碼的方法,
/** * 產生二維碼圖片 * @param dir 存放的目錄 * @param fileName 檔案名稱要以.jpg結尾 * @param content 這個內容可以是文字或連結 */ public void generateQRCode(String dir, String fileName, String content) { //產生二維碼的寬高 int size = 200; Map<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); // 指定錯誤修正等級 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 指定編碼格式 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); try { //encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints) BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, size, size, hints); bitMatrix = updateBit(bitMatrix, 8); File file1 = new File(dir); if (!file1.exists()) { file1.mkdirs(); } //將產生的矩陣像素寫入到指定檔案中,這裡是以jpg結尾 MatrixToImageWriter.writeToStream(bitMatrix, "jpg", new FileOutputStream(dir + "/"+fileName)); System.out.println("建立成功"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (WriterException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
這裡產生的二維碼留的白色邊距有點多,想要適當減小邊距,看下面
如果不想邊距太大,我們可以取得二維碼的真是寬高,然後建立立一個空的BitMatrix對象來放這個二維碼即可
margin為白色邊距的大小
private static BitMatrix updateBit(BitMatrix matrix, int margin) { int tempM = margin * 2; //left,top,width,height // 0 1 2 3 對應的數組下標 //這裡的width和height是指去除白色邊框後的真實的二維碼長寬,而不是圖片長寬。 int[] rec = matrix.getEnclosingRectangle(); // 擷取二維碼圖案的屬性 int resWidth = rec[2] + tempM;//真實寬度加左右邊距 int resHeight = rec[3] + tempM; BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); // 按照自訂邊框產生新的BitMatrix resMatrix.clear(); for (int i = margin; i < resWidth - margin; i++) { // 迴圈,將二維碼圖案繪製到新的bitMatrix中 for (int j = margin; j < resHeight - margin; j++) { if (matrix.get(i - margin + rec[0], j - margin + rec[1])) { resMatrix.set(i, j); } } } return resMatrix; }
產生二維碼
這樣白色邊距就不會太大了,好看多了
後面還有將二維碼嵌入到海報,或者其他活動圖表片上的方法,直接上代碼
public void insertQRCode(BufferedImage zxingImage, String backgroundPath) { InputStream dest = null; try { dest = new FileInputStream(backgroundPath); BufferedImage image = ImageIO.read(dest); Graphics g = image.getGraphics(); int leftMargin = image.getWidth() - zxingImage.getWidth() - 10; int topMargin = image.getHeight() - zxingImage.getHeight() - 10; g.drawImage(zxingImage, leftMargin, topMargin, zxingImage.getWidth(), zxingImage.getHeight(), null); ImageIO.write(image, "jpg", new FileOutputStream("D:\\QRCode\\zengmei.jpg")); System.out.println("建立成功"); } catch (IOException e) { e.printStackTrace(); } }
還有修改二維碼線條顏色,在二維碼中插入logo表徵圖等方法,下次繼續補充。
謝謝瀏覽
參考連結:
https://www.cnblogs.com/qwqwQAQ/p/8118109.html
JAVA實現基於ZXing的二維碼自動產生與圖片合成
79744670
Java通過Zxing產生二維碼
http://blog.51cto.com/9732420/1742136
開源項目地址
https://github.com/zxing/zxing
java學習-zxing產生二維碼矩陣的簡單例子