额尔古纳网站建设介绍重庆网页设计
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:20
当前位置: 首页 > news >正文
额尔古纳网站建设,介绍重庆网页设计,用python做的网站模板,有没有做门店设计的网站Springboot生成二维码整合 我们使用两种方式#xff0c;去生成二维码#xff0c;但是其实#xff0c;二维码的生成基础#xff0c;都是zxing包#xff0c;这是Google开源的一个包#xff0c;第一种是使用原始的zxing方式去实现#xff0c;第二种是使用hutool来实现去生成二维码但是其实二维码的生成基础都是zxing包这是Google开源的一个包第一种是使用原始的zxing方式去实现第二种是使用hutool来实现hutool其实也是对于zxing的一个封装但是封装前后确实比较简单了。 Zxing原生方式 添加依赖 !– zxing生成二维码 – dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.3.3/version /dependencydependencygroupIdcom.google.zxing/groupIdartifactIdjavase/artifactIdversion3.3.3/version /dependency二维码生成工具类 下面是把生成二维码的方法封装到了QRCodeUtil的类之中这个方法看起来还是比较多的但是也谈不上太复杂主要是对于BufferedImage生成图片然后就是ImageIO.write()方法write的位置可以是普通的磁盘文件也可以是web的流我们使用web流的时候就需要添加com.google.zxing-javase的依赖。 Component Slf4j public class QRCodeUtil {/*** CODE_WIDTH二维码宽度单位像素* CODE_HEIGHT二维码高度单位像素* FRONT_COLOR二维码前景色0x000000 表示黑色* BACKGROUND_COLOR二维码背景色0xFFFFFF 表示白色* 演示用 16 进制表示和前端页面 CSS 的取色是一样的注意前后景颜色应该对比明显如常见的黑白/private static final int CODE_WIDTH 400;private static final int CODE_HEIGHT 400;private static final int FRONT_COLOR 0x000000;private static final int BACKGROUND_COLOR 0xFFFFFF;/** param codeContent 二维码参数内容如果是一个网页地址如 https://www.baidu.com/ 则 微信扫一扫会直接进入此地址 如果是一些参数如* 1541656080837则微信扫一扫会直接回显这些参数值* param codeImgFileSaveDir 二维码图片保存的目录,如 D:/codes* param fileName 二维码图片文件名称带格式,如 123.png/public static void createCodeToFile(String codeContent, File codeImgFileSaveDir, String fileName) {try {if (codeContent null || .equals(codeContent)) {log.info(二维码内容为空不进行操作…);return;}codeContent codeContent.trim();if (codeImgFileSaveDir null || codeImgFileSaveDir.isFile()) {codeImgFileSaveDir FileSystemView.getFileSystemView().getHomeDirectory();log.info(二维码图片存在目录为空默认放在桌面…);}if (!codeImgFileSaveDir.exists()) {codeImgFileSaveDir.mkdirs();log.info(二维码图片存在目录不存在开始创建…);}if (fileName null || .equals(fileName)) {fileName new Date().getTime() .png;log.info(二维码图片文件名为空随机生成 png 格式图片…);}BufferedImage bufferedImage getBufferedImage(codeContent);/** javax.imageio.ImageIOjava扩展的图像IO write(RenderedImage im, String formatName, File output)* im待写入的图像 formatName图像写入的格式output写入的图像文件文件不存在时会自动创建/File codeImgFile new File(codeImgFileSaveDir, fileName);ImageIO.write(bufferedImage, png, codeImgFile);log.info(二维码图片生成成功 codeImgFile.getPath());} catch (Exception e) {e.printStackTrace();}}/** 生成二维码并输出到输出流, 通常用于输出到网页上进行显示* 输出到网页与输出到磁盘上的文件中区别在于最后一句 ImageIO.write* write(RenderedImage im,String formatName,File output)写到文件中* write(RenderedImage im,String formatName,OutputStream output)输出到输出流中** param codeContent 二维码内容* param outputStream 输出流比如 HttpServletResponse 的 getOutputStream/public static void createCodeToOutputStream(String codeContent, OutputStream outputStream) {try {if (codeContent null || .equals(codeContent.trim())) {log.info(二维码内容为空不进行操作…);return;}codeContent codeContent.trim();BufferedImage bufferedImage getBufferedImage(codeContent);/** 区别就是以一句输出到输出流中如果第三个参数是 File则输出到文件中/ImageIO.write(bufferedImage, png, outputStream);log.info(二维码图片生成到输出流成功…);} catch (Exception e) {e.printStackTrace();log.error(发生错误: {}!, e.getMessage());}}private static BufferedImage getBufferedImage(String codeContent) throws WriterException {/** com.google.zxing.EncodeHintType编码提示类型,枚举类型* EncodeHintType.CHARACTER_SET设置字符编码类型* EncodeHintType.ERROR_CORRECTION设置误差校正* ErrorCorrectionLevel误差校正等级L ~7% correction、M ~15% correction、Q ~25% correction、H ~30% correction* 不设置时默认为 L 等级等级不一样生成的图案不同但扫描的结果是一样的* EncodeHintType.MARGIN设置二维码边距单位像素值越小二维码距离四周越近/MapEncodeHintType, Object hints new HashMap();hints.put(EncodeHintType.CHARACTER_SET, UTF-8);hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);hints.put(EncodeHintType.MARGIN, 1);/** MultiFormatWriter:多格式写入这是一个工厂类里面重载了两个 encode 方法用于写入条形码或二维码 encode(String contents,BarcodeFormat format,int width, int height,MapEncodeHintType,? hints)* contents:条形码/二维码内容* format编码类型如 条形码二维码 等* width码的宽度* height码的高度* hints码内容的编码类型* BarcodeFormat枚举该程序包已知的条形码格式即创建何种码如 1 维的条形码2 维的二维码 等* BitMatrix位(比特)矩阵或叫2D矩阵也就是需要的二维码/MultiFormatWriter multiFormatWriter new MultiFormatWriter();BitMatrix bitMatrix multiFormatWriter.encode(codeContent, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);/** java.awt.image.BufferedImage具有图像数据的可访问缓冲图像实现了 RenderedImage 接口 BitMatrix 的 get(int x, int y) 获取比特矩阵内容指定位置有值则返回true将其设置为前景色否则设置为背景色* BufferedImage 的 setRGB(int x, int y, int rgb) 方法设置图像像素* x像素位置的横坐标即列* y像素位置的纵坐标即行* rgb像素的值采用 16 进制,如 0xFFFFFF 白色/BufferedImage bufferedImage new BufferedImage(CODE_WIDTH, CODE_HEIGHT, BufferedImage.TYPE_INT_BGR);for (int x 0; x CODE_WIDTH; x) {for (int y 0; y CODE_HEIGHT; y) {bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? FRONT_COLOR : BACKGROUND_COLOR);}}return bufferedImage;}/** 根据本地二维码图片解析二维码内容 注图片必须是二维码图片但也可以是微信用户二维码名片上面有名称、头像也是可以的** param file 本地二维码图片文件,如 E:\logs\2.jpg* return* throws Exception/public static String parseQRCodeByFile(File file) {String resultStr null;if (file null || file.isDirectory() || !file.exists()) {return resultStr;}try {/** ImageIO的BufferedImage read(URL input)方法用于读取网络图片文件转为内存缓冲图像 同理还有read(File input)、read(InputStream input)、、read(ImageInputStream stream)/BufferedImage bufferedImage ImageIO.read(file);/** com.google.zxing.client.j2se.BufferedImageLuminanceSource缓冲图像亮度源 将 java.awt.image.BufferedImage 转为 zxing 的 缓冲图像亮度源* 关键就是下面这几句HybridBinarizer 用于读取二维码图像数据BinaryBitmap 二进制位图/BufferedImageLuminanceSource source new BufferedImageLuminanceSource(bufferedImage);BinaryBitmap bitmap new BinaryBitmap(new HybridBinarizer(source));Hashtable hints new Hashtable();hints.put(DecodeHintType.CHARACTER_SET, UTF-8);/** 如果图片不是二维码图片则 decode 抛异常com.google.zxing.NotFoundException MultiFormatWriter 的 encode 用于对内容进行编码成 2D 矩阵* MultiFormatReader 的 decode 用于读取二进制位图数据/Result result new MultiFormatReader().decode(bitmap, hints);resultStr result.getText();} catch (IOException e) {e.printStackTrace();} catch (NotFoundException e) {e.printStackTrace();log.error(图片非二维码图片, 路径是: {}!, file.getPath());}return resultStr;}/** 根据网络二维码图片解析二维码内容, 区别仅仅在于 ImageIO.read(url); 这一个重载的方法** param url 二维码图片网络地址如 https://res.wx.qq.com/mpres/htmledition/images/mp_qrcode3a7b38.gif* return* throws Exception/public static String parseQRCodeByUrl(URL url) {String resultStr null;if (url null) {return resultStr;}try {/** ImageIO 的 BufferedImage read(URL input) 方法用于读取网络图片文件转为内存缓冲图像 同理还有read(File input)、read(InputStream input)、、read(ImageInputStream stream)* 如果图片网络地址错误比如不能访问则 read 抛异常javax.imageio.IIOException: Cant get input stream from URL!/BufferedImage bufferedImage ImageIO.read(url);/** com.google.zxing.client.j2se.BufferedImageLuminanceSource缓冲图像亮度源 将 java.awt.image.BufferedImage 转为 zxing 的 缓冲图像亮度源* 关键就是下面这几句HybridBinarizer 用于读取二维码图像数据BinaryBitmap 二进制位图/BufferedImageLuminanceSource source new BufferedImageLuminanceSource(bufferedImage);BinaryBitmap bitmap new BinaryBitmap(new HybridBinarizer(source));Hashtable hints new Hashtable();/** 如果内容包含中文则解码的字符集格式应该和编码时一致/hints.put(DecodeHintType.CHARACTER_SET, UTF-8);/** 如果图片不是二维码图片则 decode 抛异常com.google.zxing.NotFoundException* MultiFormatWriter 的 encode 用于对内容进行编码成 2D 矩阵* MultiFormatReader 的 decode 用于读取二进制位图数据/Result result new MultiFormatReader().decode(bitmap, hints);resultStr result.getText();} catch (IOException e) {e.printStackTrace();log.error(二维码图片地址错误, 地址是: {}!, url);} catch (NotFoundException e) {e.printStackTrace();log.error(图片非二维码图片, 地址是: {}!, url);}return resultStr;}添加Controller public class QRCodeController {GetMapping(qrCode)public void getQRCode(String codeContent, HttpServletResponse response) {System.out.println(codeContent codeContent);try {/** 调用工具类生成二维码并输出到输出流中/QRCodeUtil.createCodeToOutputStream(codeContent, response.getOutputStream());log.info(成功生成二维码!);} catch (IOException e) {log.error(发生错误 错误信息是{}, e.getMessage());}}}添加测试页面 !DOCTYPE html html langenheadmeta charsetUTF-8title二维码生成器/titlestyle typetext/csstextarea {font-size: 16px;width: 300px;height: 100px;}.hint {color: red;display: none;}.qrCodeDiv {width: 200px;height: 200px;border: 2px solid sandybrown;}.qrCodeDiv img {max-height: 100%;max-width: 100%;}/stylescript srchttps://cdn.bootcss.com/jquery/2.1.1/jquery.min.js/scriptscript typetext/javascript\((function () {\)(button).click(function () {var codeContent \((textarea).val();console.log(codeContent);if (codeContent.trim() ) {\)(.hint).text(二维码内容不能为空).fadeIn(500);} else {\((.hint).text().fadeOut(500);\)(#codeImg).attr(src, /qrCode?codeContent codeContent);}});});/script/headbodytextarea placeholder二维码内容…/textareabrbutton生成二维码/buttonspan classhint/spandiv classqrCodeDivimg src idcodeImg/div/body /htmlHutool的方式 Hutool的是非强制依赖性因此zxing需要用户自行引入我们需要加入依赖。使用hutool的时候com.google.zxing-javase的依赖可以不需要。 添加依赖 dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.3.10/version /dependency dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.3.3/version /dependency创建QRCodeService QRCodeService其实就是对QrCodeUtil的功能的封装QrCodeUtil此处的类是hutool工具提供的和我们在上面与自己与自己提供的QRCodeUtil类不是同一个这个需要注意一下。QrCodeUtil的功能此处主要使用到了的是生成二维码到文件或者流之中QrConfig是Hutool工具QrCodeUtil的配置类。 Service Slf4j public class QRCodeService {// 自定义参数这部分是Hutool工具封装的private static QrConfig initQrConfig() {QrConfig config new QrConfig(300, 300);// 设置边距既二维码和背景之间的边距config.setMargin(3);// 设置前景色既二维码颜色青色config.setForeColor(Color.CYAN.getRGB());// 设置背景色灰色config.setBackColor(Color.GRAY.getRGB());return config;}/*** 生成到文件** param content* param filepath/public void createQRCode2File(String content, String filepath) {try {QrCodeUtil.generate(content, initQrConfig(), FileUtil.file(filepath));log.info(生成二维码成功, 位置在{}, filepath);} catch (QrCodeException e) {log.error(发生错误 {}, e.getMessage());}}/** 生成到流** param content* param response*/public void createQRCode2Stream(String content, HttpServletResponse response) {try {QrCodeUtil.generate(content, initQrConfig(), png, response.getOutputStream());log.info(生成二维码成功!);} catch (QrCodeException | IOException e) {log.error(发生错误 {}, e.getMessage());}} }添加Controller RestController Slf4j public class QRCodeController {Autowiredprivate QRCodeService qrCodeService;GetMapping(qrCode)public void getQRCode(String codeContent, HttpServletResponse response) {try {qrCodeService.createQRCode2Stream(codeContent, response);log.info(成功生成二维码);} catch (Exception e) {log.error(发生错误 错误信息是{}, e.getMessage());}}}
- 上一篇: 峨边网站建设asp手机网站模板
- 下一篇: 额尔古纳网站建设专业建站公司建站系统该规划哪些内容
相关文章
-
峨边网站建设asp手机网站模板
峨边网站建设asp手机网站模板
- 技术栈
- 2026年03月21日
-
俄语网站建设公司wordpress更新主题
俄语网站建设公司wordpress更新主题
- 技术栈
- 2026年03月21日
-
俄语免费网站制作河源哪里做网站
俄语免费网站制作河源哪里做网站
- 技术栈
- 2026年03月21日
-
额尔古纳网站建设专业建站公司建站系统该规划哪些内容
额尔古纳网站建设专业建站公司建站系统该规划哪些内容
- 技术栈
- 2026年03月21日
-
恶意代码 wordpress上海网站排名seo公司哪家好
恶意代码 wordpress上海网站排名seo公司哪家好
- 技术栈
- 2026年03月21日
-
恶意网站怎么办50人办公室网络搭建
恶意网站怎么办50人办公室网络搭建
- 技术栈
- 2026年03月21日






