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

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

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

瀏覽:25日期: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久久,三上悠亚国产精品一区二区三区
亚洲精品一二三区区别| 午夜一区在线| 午夜天堂精品久久久久| 免费一二一二在线视频| а√天堂中文在线资源8| 日本在线视频一区二区| 欧洲激情综合| 天堂网av成人| 国产精品调教| 日本高清久久| 1000部精品久久久久久久久| 精品国产亚洲日本| 精品一区二区三区中文字幕 | 国产精品对白久久久久粗| 夜久久久久久| 久久国产99| 99视频精品全部免费在线视频| 亚洲黄色中文字幕| 亚洲午夜电影| av高清不卡| 亚洲www啪成人一区二区| 欧美日韩国产综合网| 亚洲一区激情| 日韩高清在线观看一区二区| 国产精品欧美一区二区三区不卡| 国产精品男女| 欧美freesex黑人又粗又大| 国产91精品对白在线播放| 视频在线在亚洲| 国产毛片精品久久| 麻豆国产一区| 久久精品亚洲人成影院| 久久亚洲电影| 美女网站久久| 国产精品theporn| 国产高潮在线| 国产99精品| 国产精品久久久久久久久久久久久久久 | 亚洲欧美高清| 鲁大师影院一区二区三区| 亚洲欧洲免费| 国产日韩一区二区三区在线| 日本麻豆一区二区三区视频| 国产日韩亚洲| 国产一区2区| 国产模特精品视频久久久久| 久久不卡国产精品一区二区| 亚洲综合另类| 亚洲a一区二区三区| 69堂精品视频在线播放| 午夜宅男久久久| a天堂资源在线| 亚洲tv在线| 97精品国产| 你懂的网址国产 欧美| 丝袜脚交一区二区| 国产精品香蕉| 日韩激情综合| 久久99伊人| 国产99久久| www.九色在线| 黄色在线网站噜噜噜| 国产精品久久国产愉拍| 亚洲欧美在线综合| 免费国产自线拍一欧美视频| 成人久久久久| 欧美国产偷国产精品三区| 日本va欧美va精品| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲国产影院| 91精品国产自产在线观看永久∴| 国产精品一区二区精品| 五月国产精品| 国产精品呻吟| 91久久国产| 国产亚洲在线| 美美哒免费高清在线观看视频一区二区| 欧美精品三级在线| 国产伦精品一区二区三区千人斩 | 深夜福利视频一区二区| 国产成人在线中文字幕| 久久精品三级| 亚洲精品123区| 欧美日韩国产精品一区二区亚洲| 精品日韩毛片| 久久九九99| 欧美亚洲国产激情| 欧美专区18| 国产日韩一区| 国产在线不卡一区二区三区| 日韩久久精品| 亚洲一区二区三区免费在线观看| 久久xxxx| 国产伦理久久久久久妇女| 日韩88av| 蜜桃av一区二区在线观看| 国产精品观看| 婷婷激情一区| 午夜在线精品偷拍| 国产日韩欧美一区在线| 精品资源在线| 国产一区成人| 久久精品国产成人一区二区三区| 久久亚洲精品中文字幕| 欧美久久精品一级c片| 免费人成网站在线观看欧美高清| 免费精品视频最新在线| 高潮久久久久久久久久久久久久| 99成人在线视频| 性色一区二区| 国产欧美日韩一级| 国产一区二区中文| 久久久成人网| 日本久久一区| 蘑菇福利视频一区播放| 91日韩免费| 97se亚洲| 日韩精品专区| 亚洲专区欧美专区| 免费一级欧美在线观看视频| 日韩精品看片| 福利片在线一区二区| 久久婷婷国产| 亚洲欧美日韩在线观看a三区 | 91免费精品国偷自产在线在线| 99久久亚洲精品蜜臀| 在线中文字幕播放| 日本在线一区二区三区| 日韩中文字幕一区二区高清99| 亚洲精品欧美| 日本成人在线不卡视频| 欧美日韩一区二区三区四区在线观看 | 红杏一区二区三区| 久久久久伊人| 超碰99在线| 精品免费在线| 成人日韩在线| 国产中文欧美日韩在线| 成人综合一区| 日韩在线短视频| 1024精品一区二区三区| 五月天久久网站| 中国女人久久久| 丝瓜av网站精品一区二区| 在线精品福利| 日韩高清不卡在线| 麻豆高清免费国产一区| 激情视频网站在线播放色| 91精品啪在线观看国产18| 欧美视频二区| 国产探花在线精品一区二区| 久久gogo国模啪啪裸体| 久久毛片亚洲| 午夜日韩av| 91欧美日韩在线| аⅴ资源天堂资源库在线| 久久久久久黄| 丝袜美腿高跟呻吟高潮一区| 欧美日韩一区自拍| 成人精品高清在线视频| 欧美福利专区| 日韩1区2区3区| 久久中文字幕一区二区| 天堂日韩电影| 亚洲三级av| 国产日韩欧美高清免费| 日本久久黄色| 先锋影音国产一区| 国产日本亚洲| 欧美精品高清| 蜜桃视频免费观看一区| 国产欧美三级| 91亚洲无吗| 久久美女性网| 国产精品女主播一区二区三区| 日本欧洲一区二区| 欧美精品福利| 色爱综合av| 极品日韩av| 国产美女久久| а√天堂8资源中文在线| 视频在线观看一区二区三区| 国产日韩欧美一区| 91精品一区国产高清在线gif| 亚洲人成亚洲精品| 国产不卡精品| 亚洲九九精品| 日韩在线不卡| 日韩中文字幕在线一区| 一本大道色婷婷在线| 亚洲一二av| 中文字幕在线高清| 免费国产自久久久久三四区久久| 综合激情一区| 好吊视频一区二区三区四区| 日本一区中文字幕| 国产成人久久| 免费在线看一区| 国产一区二区三区精品在线观看 | 欧美激情麻豆|