日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java基于zxing生成二維碼矩陣過程解析

瀏覽:28日期:2022-08-23 15:53:55

這個例子需要使用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>

下面是將生成的二維碼矩陣寫入到jpg文件中。

* 生成二維碼圖片 * @param dir 存放的目錄 * @param fileName 文件名要以.jpg結尾 * @param content 這個內容可以是文字或鏈接 */ public static void generateQRCode(String dir, String fileName, String content) { //生成二維碼的寬高 int size = 400; Map<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); // 指定糾錯等級 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 指定編碼格式 hints.put(EncodeHintType.CHARACTER_SET, 'UTF-8'); // 指定二維碼的邊距,設置后無效,,設置糾錯等級ErrorCorrectionLevel.H為高等級時,無效 //hints.put(EncodeHintType.MARGIN, 1); 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, 20); 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(); } }

上面指定了糾錯等級設置有四個值

/** L = ~7% correction */ L(0x01), /** M = ~15% correction */ M(0x00), /** Q = ~25% correction */ Q(0x03), /** H = ~30% correction */ H(0x02);

指定為L,M這兩個等級時,二維碼大小會根據其存儲的數據量變化,即邊距肯能會很大,看下圖,

Q,H高等級時,會按照標準格式顯示二維碼圖片。建議使用H等級。

這里生成的二維碼留的白色邊距有點多,想要適當減小邊距,看下圖

Java基于zxing生成二維碼矩陣過程解析

如果不想邊距太大,我們可以將生成的二維碼圖片進行剪切。新建立一個空的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++) {//margin + rec[0]if (matrix.get(i - margin + rec[0], j - margin + rec[1])) { resMatrix.set(i, j);} } } return resMatrix; }

生成二維碼

Java基于zxing生成二維碼矩陣過程解析

這樣白色邊距就不會太大了,好看多了

后面還有將二維碼嵌入到海報,或者其他活動圖片上的方法,直接上代碼

將二維碼放置在圖片右下角的位置

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:QRCodezengmei.jpg')); System.out.println('創建成功'); } catch (IOException e) { e.printStackTrace(); } }

生成后的結果,圖片是本地隨便找了一張圖片

Java基于zxing生成二維碼矩陣過程解析

修改二維碼線條顏色,在二維碼中插入logo圖標等方法

發現修改二維碼顏色之后,用微信,qq掃描二維碼很難被識別。這個很難受。這里說下怎么改。

修改原理就是,將內容通過new MultiFormatWriter().encode()方法生成二維矩陣后,,

用一個新的BufferedImage對象作為容器給矩陣的兩個不同的值設置顏色,有值得為true,沒值false,即設置黑白兩種顏色

/** * * @param onColor 二維碼的顏色,即黑白二維碼的黑色 :0xFF000000 藍色 0xFF000055 * @param offColor 二維碼的背景色 如白色:0xFFFFFFFF */ public static void generateOtherQRCode(int onColor, int offColor) { String content = '小姐姐最棒啦^_^'; int size = 200; Map<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); // 指定糾錯等級 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q); // 指定編碼格式 hints.put(EncodeHintType.CHARACTER_SET, 'UTF-8'); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, size, size, hints); BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(onColor, offColor)); ImageIO.write(image, 'png', new FileOutputStream('D:/QRCode/beautiful.png')); System.out.println('操作成功'); } catch (IOException e) { e.printStackTrace(); } catch (WriterException e) { e.printStackTrace(); } }

重要方法是:MatrixToImageWriter.toBufferedImage

也就是設置顏色,然后返回BufferImage對象

public static BufferedImage toBufferedImage(BitMatrix matrix, MatrixToImageConfig config) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, config.getBufferedImageColorModel()); int onColor = config.getPixelOnColor(); int offColor = config.getPixelOffColor(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, matrix.get(x, y) ? onColor : offColor); } } return image; }

//imageType , zxing支持的圖像類型有三種,黑白顏色的默認為BufferedImage.TYPE_BYTE_BINARY = 12,圖像不帶透明度alpha 最多是4bit的的圖像TYPE_INT_RGB 這個是不帶alpha的8bit圖像TYPE_INT_ARGB 這個帶alpha的8bit圖像java.awt.image.BufferedImage.BufferedImage(int width, int height, int imageType)

開源項目地址

https://github.com/zxing/zxing

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩一区自拍| 狠狠色狠狠色综合日日tαg| 男女激情视频一区| 在线观看精品| 99久久精品国产亚洲精品| 亚洲人成在线网站| 欧美日韩尤物久久| 久久一区二区三区电影| 欧美中文字幕一区二区| 日韩视频久久| 亚洲精品激情| 欧美性www| 欧美a级一区二区| 精品国产18久久久久久二百| 午夜影院一区| 极品日韩av| 石原莉奈在线亚洲三区| 亚洲一区二区三区中文字幕在线观看| 在线综合亚洲| 日韩精品视频网站| 麻豆精品av| 欧美精品高清| 香蕉久久国产| 911精品国产| 国产一区二区三区日韩精品| 精品亚洲美女网站| 蜜桃一区二区三区在线| 97精品久久| 成人影视亚洲图片在线| 欧美91视频| 日本成人精品| 黄色aa久久| 巨乳诱惑日韩免费av| 日本一区中文字幕| 黑森林国产精品av| 亚洲一区欧美| 韩国一区二区三区视频| 性欧美xxxx免费岛国不卡电影| 男人操女人的视频在线观看欧美| 国产伦精品一区二区三区千人斩| 91av亚洲| 亚洲美女91| 国产h片在线观看| 国产毛片一区| 久久一区亚洲| 亚洲激情av| 久久精品二区亚洲w码| 日韩一区二区免费看| 国产探花一区| 欧美福利一区| 久久av免费看| 99pao成人国产永久免费视频| 国产日本亚洲| 欧美日韩精品一本二本三本| 国产精品一区二区三区www| 999久久久91| 国产欧美午夜| 99日韩精品| 国产aⅴ精品一区二区四区| 欧美成人午夜| 欧美激情福利| 蜜臀a∨国产成人精品| 精品国产第一福利网站| 一区二区三区国产盗摄| 亚洲三级欧美| 欧美片网站免费| 最新亚洲激情| 97人人精品| 国产乱码精品一区二区三区四区 | 91视频一区| 午夜天堂精品久久久久| 久久久人人人| 乱一区二区av| 亚洲精品观看| 日韩欧美不卡| 久久国产精品免费精品3p| 在线精品小视频| 成人三级高清视频在线看| 亚洲人www| av不卡免费看| 香蕉成人av| 免费观看亚洲天堂| 四虎在线精品| 国产亚洲激情| 在线日韩av| 日韩欧美字幕| 久久精品一区二区国产| 婷婷五月色综合香五月| 日韩亚洲在线| 国产精品伦理久久久久久| 欧美亚洲tv| 亚洲欧洲日韩| 日韩在线一区二区| 欧美va天堂| 久久久久久久久99精品大| 久久精品国产网站| 国产午夜精品一区在线观看| 在线观看一区| 激情91久久| 蜜桃tv一区二区三区| 亚洲黄色中文字幕| 国产精品www.| 国产精品一区三区在线观看| 日本欧美在线| 亚洲中字黄色| 亚洲欧美日韩高清在线| 欧美亚洲激情| 久久久一二三| 色爱av综合网| 九九精品调教| 国产美女高潮在线| 正在播放日韩精品| 日韩一区二区三区免费播放| 黄毛片在线观看| 一本大道色婷婷在线| 日韩黄色大片网站| 青青久久av| 欧美福利在线| 一区二区亚洲精品| 国产高清久久| 一区三区视频| 蜜臀国产一区二区三区在线播放| 久久国产精品99国产| 在线国产日韩| 日韩精品免费一区二区夜夜嗨| 婷婷综合成人| 欧美在线黄色| 国产精品v一区二区三区| 美女性感视频久久| 精品欠久久久中文字幕加勒比| 久久精品国产福利| 国产福利电影在线播放| 日韩高清中文字幕一区二区| 91精品xxx在线观看| 久久91导航| 亚洲免费激情| 日韩av网站在线免费观看| 国产精品中文字幕亚洲欧美| 欧美a在线观看| 在线天堂资源www在线污| 99精品综合| 中文精品电影| 国产精品成人自拍| 日韩深夜视频| 日韩午夜高潮| 日韩超碰人人爽人人做人人添| 国产欧美一区二区三区精品观看| 国产精品久久久久久久久久白浆 | 国产乱码精品一区二区亚洲| 久久超级碰碰| 日韩久久电影| 日韩视频在线一区二区三区 | 九九99久久精品在免费线bt| 国产中文在线播放| 亚洲精品一区二区妖精| 婷婷精品在线| 国产成人1区| 欧美日韩国产精品一区二区亚洲| 亚洲va久久久噜噜噜久久| 国产精品九九| 三级小说欧洲区亚洲区| 喷白浆一区二区| 久久精品午夜| 亚洲美洲欧洲综合国产一区| 欧美日韩亚洲一区二区三区在线 | 波多视频一区| 久久亚洲二区| 国产精品1区| 99精品在线| 日韩精品第一| 欧美aa一级| 亚洲精品一级| sm久久捆绑调教精品一区| 国产精品毛片一区二区三区| 日本成人在线视频网站| 麻豆视频在线看| 人人精品人人爱| 高清av一区| 亚洲一区欧美二区| 精品视频一区二区三区在线观看 | 欧美91在线| 国产精品呻吟| 国产一区二区三区黄网站| 欧美综合二区| 麻豆视频在线看| 在线观看视频免费一区二区三区| 精品视频高潮| 石原莉奈一区二区三区在线观看| 精品美女久久| 一区二区精品| 日本欧美不卡| 青青青国产精品| 久久久久欧美精品| 国产精品日韩精品在线播放| 最新亚洲激情| 日韩精品91| 国产福利一区二区精品秒拍| 国产精品外国| 精品欧美一区二区三区在线观看| 91成人在线精品视频|