引入依赖JardependencygroupIdcom。google。zxinggroupIdcoreartifactIdversion3。4。0versiondependencydependencygroupIdcom。google。zxinggroupIdjavaseartifactIdversion3。4。0versiondependency二维码图片生成工具类 方法drawQRCode(),根据内容直接生成,同时可以指定生成二维码图片的宽度和高度 方法drawLogoQRCode(),根据内容生成,支持在二维码中间带上logo。publicclassQRCodeUtils{privatefinalstaticLoggerloggerLoggerFactory。getLogger(QRCodeUtils。class);二维码图片格式privatefinalstaticStringPNGFORMATpng;privatefinalstaticStringUTF8utf8;二维码图片背景颜色,黑色publicstaticintQRCOLOR0xFF000000;二维码图片颜色,白色publicstaticintBGWHITE0xFFFFFFFF;根据二维码内容生成二维码paramurl二维码内容paramimageWidth图片宽度paramimageHeight图片高度returnpublicstaticStringdrawQRCode(Stringurl,intimageWidth,intimageHeight){if(StringUtils。isEmpty(url)){returnnull;}try(ByteArrayOutputStreamoutStreamnewByteArrayOutputStream();){QRCodeWriterwriternewQRCodeWriter();BitMatrixbmwriter。encode(url,BarcodeFormat。QRCODE,imageWidth,imageHeight,HINTS);MatrixToImageWriter。writeToStream(bm,PNGFORMAT,outStream);returnnewString(Base64。encodeBase64(outStream。toByteArray()),UTF8);}catch(Exceptione){logger。error(生成二维码失败:e。getMessage());}returnnull;}生成带logo的二维码图片paramlogoUrllogo图片地址paramqrUrl二维码地址paramimageWidth图片宽度paramimageHeight图片高度returnpublicstaticStringdrawLogoQRCode(StringlogoUrl,StringqrUrl,intimageWidth,intimageHeight){try{MultiFormatWritermultiFormatWriternewMultiFormatWriter();参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数BitMatrixbmmultiFormatWriter。encode(qrUrl,BarcodeFormat。QRCODE,imageWidth,imageHeight,HINTS);BufferedImageimagenewBufferedImage(imageWidth,imageHeight,BufferedImage。TYPEINTRGB);开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色for(intx0;ximageWidth;x){for(inty0;yimageHeight;y){image。setRGB(x,y,bm。get(x,y)?QRCOLOR:BGWHITE);}}addLogoImage(logoUrl,image);image。flush();ByteArrayOutputStreamoutputStreamnewByteArrayOutputStream();ImageIO。write(image,PNGFORMAT,outputStream);returnnewString(Base64。encodeBase64(outputStream。toByteArray()),UTF8);}catch(Exceptione){logger。error(drawLogoQRCodeerrore。getMessage());}return;}privatestaticvoidaddLogoImage(StringlogoUrl,finalBufferedImageimage)throwsIOException{BufferedImagelogoBuffnull;if(logoUrl。startsWith(http)){构建绘图对象InputStreamlogoFileInputStreamnewURL(logoUrl)。openStream();logoBuffImageIO。read(logoFileInputStream);}else{FilelogoFilenewFile(logoUrl);if(logoFile。exists()){logoBuffImageIO。read(logoFile);}}Graphics2Dgimage。createGraphics();intwidthimage。getWidth();intheightimage。getHeight();g。drawImage(logoBuff,width25,height25,width210,height210,null);g。dispose();logoBuff。flush();}用于设置QR二维码参数privatestaticMapEncodeHintType,ObjectHINTSnewHashMapEncodeHintType,Object(){{设置QR二维码的纠错级别(H为最高级别)具体级别信息put(EncodeHintType。ERRORCORRECTION,ErrorCorrectionLevel。H);设置编码方式put(EncodeHintType。CHARACTERSET,UTF8);put(EncodeHintType。MARGIN,0);}};}使用及效果Stringlogohttps:www。baidu。comimgPCtmd9c8750bed0b3c7d089fa7d55720d6cf。png;Stringurlhttp:www。baidu。com;StringurlPathQRCodeUtils。drawLogoQRCode(logo,url,400,400);StringurlPathQRCodeUtils。drawQRCode(url,400,400);Stringbas464data:imagepng;base64,urlPath;returnbas464;imgsrca2020imgdataimg。jpgdatasrc{base64内容}