电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

這個(gè)例子需要使用google的開源項(xiàng)目zxing的核心jar包

core-3.2.0.jar

可以百度搜索下載jar文件,也可使用maven添加依賴

<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency>

下面是將生成的二維碼矩陣寫入到j(luò)pg文件中。

* 生成二維碼圖片 * @param dir 存放的目錄 * @param fileName 文件名要以.jpg結(jié)尾 * @param content 這個(gè)內(nèi)容可以是文字或鏈接 */ public static void generateQRCode(String dir, String fileName, String content) { //生成二維碼的寬高 int size = 400; Map<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); // 指定糾錯(cuò)等級(jí) hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 指定編碼格式 hints.put(EncodeHintType.CHARACTER_SET, 'UTF-8'); // 指定二維碼的邊距,設(shè)置后無效,,設(shè)置糾錯(cuò)等級(jí)ErrorCorrectionLevel.H為高等級(jí)時(shí),無效 //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結(jié)尾 MatrixToImageWriter.writeToStream(bitMatrix, 'jpg', new FileOutputStream(dir + '/' + fileName)); System.out.println('創(chuàng)建成功'); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (WriterException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

上面指定了糾錯(cuò)等級(jí)設(shè)置有四個(gè)值

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

指定為L,M這兩個(gè)等級(jí)時(shí),二維碼大小會(huì)根據(jù)其存儲(chǔ)的數(shù)據(jù)量變化,即邊距肯能會(huì)很大,看下圖,

Q,H高等級(jí)時(shí),會(huì)按照標(biāo)準(zhǔn)格式顯示二維碼圖片。建議使用H等級(jí)。

這里生成的二維碼留的白色邊距有點(diǎn)多,想要適當(dāng)減小邊距,看下圖

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

如果不想邊距太大,我們可以將生成的二維碼圖片進(jìn)行剪切。新建立一個(gè)空的BitMatrix對(duì)象來放這個(gè)二維碼

margin為白色邊距的大小

private static BitMatrix updateBit(BitMatrix matrix, int margin) { int tempM = margin * 2; //left,top,width,height // 0 1 2 3 對(duì)應(yīng)的數(shù)組下標(biāo) //這里的width和height是指去除白色邊框后的真實(shí)的二維碼長寬,而不是圖片長寬。 int[] rec = matrix.getEnclosingRectangle(); // 獲取二維碼圖案的屬性 int resWidth = rec[2] + tempM;//真實(shí)寬度加左右邊距 int resHeight = rec[3] + tempM; BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); // 按照自定義邊框生成新的BitMatrix resMatrix.clear(); //從上->下按列進(jìn)行值得復(fù)制,即一列一列的掃描到新的二維矩陣中 for (int i = margin; i < resWidth - margin; i++) { // 循環(huán),將二維碼圖案繪制到新的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生成二維碼矩陣過程解析

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

后面還有將二維碼嵌入到海報(bào),或者其他活動(dòng)圖片上的方法,直接上代碼

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

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('創(chuàng)建成功'); } catch (IOException e) { e.printStackTrace(); } }

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

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

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

發(fā)現(xiàn)修改二維碼顏色之后,用微信,qq掃描二維碼很難被識(shí)別。這個(gè)很難受。這里說下怎么改。

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

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

/** * * @param onColor 二維碼的顏色,即黑白二維碼的黑色 :0xFF000000 藍(lán)色 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>(); // 指定糾錯(cuò)等級(jí) 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

也就是設(shè)置顏色,然后返回BufferImage對(duì)象

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支持的圖像類型有三種,黑白顏色的默認(rèn)為BufferedImage.TYPE_BYTE_BINARY = 12,圖像不帶透明度alpha 最多是4bit的的圖像TYPE_INT_RGB 這個(gè)是不帶alpha的8bit圖像TYPE_INT_ARGB 這個(gè)帶alpha的8bit圖像java.awt.image.BufferedImage.BufferedImage(int width, int height, int imageType)

開源項(xiàng)目地址

https://github.com/zxing/zxing

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | 华东师范大学在职研究生招生网_在职研究生招生联展网 | 河北码上网络科技|邯郸小程序开发|邯郸微信开发|邯郸网站建设 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 深圳成考网-深圳成人高考报名网 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 华东师范大学在职研究生招生网_在职研究生招生联展网 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 太平洋亲子网_健康育儿 品质生活 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 高温高压釜(氢化反应釜)百科 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 |