当前位置: 首页 > news >正文

Java 二维码

Java 二维码

**技术:**谷歌 ZXing 实现

首先添加依赖

<!--	二维码依赖	--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.5.1</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency>

使用ZXing 生成二维码的方法

public static void erweima() throws WriterException, IOException {String s = new String("你好,我是你爹!");//第一步 :设置二维码相关参数String charset = "utf-8";//首先需要创建一个map集合,来存储二维码的 配置信息Map map = new HashMap();//设置二维码的误差校正级别 例如墨水不清晰,打印出来的清晰度,拍出来的图像//L 7% M 15% Q 25% H 30%  容错率,容错率越高,二维码越容易被识别map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置二维码的字符集map.put(EncodeHintType.CHARACTER_SET,charset);//设置二维码四周的留白map.put(EncodeHintType.MARGIN,2);//第二步:创建 ZXing 对象,MultiFormatWriter(多格式写入)//通过 MultiFormatWriter 创建一个二维码对象,MultiFormatWriter writer = new MultiFormatWriter();
//        writer.encode(内容 , 什么格式的二维码 , 二维码宽度 , 二维码高度 , 二维码参数);//BarcodeFormat 枚举 二维码类型 QR_CODE 最普通的   Aztec code//返回 位矩阵对象 (内部实际上是 一个二维数组,每一个元素是boolean类型的  true代表黑色,false代表白色)BitMatrix encode = writer.encode(s, BarcodeFormat.QR_CODE, 50, 50, map);//获得矩阵的宽度和高度int width = encode.getWidth();int height = encode.getHeight();//生成二维码图片BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//编写一个嵌套循环 遍历 位矩阵对象 填充二维码图片for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {//判断当前坐标是否是黑色boolean color = encode.get(x, y);//如果是黑色,就设置为黑色if (color) {bufferedImage.setRGB(x, y, 0x000000);  //   0x000000是黑色} else {bufferedImage.setRGB(x, y, 0xffffff); //   0xffffff是白色}}}String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path+"\\erweima.png");ImageIO.write(bufferedImage, "png", file);System.out.println("图片生成成功");}

给二维码添加logo

	public static void erweima() throws WriterException, IOException {String s = new String("你好,我是你爹!");//第一步 :设置二维码相关参数String charset = "utf-8";//首先需要创建一个map集合,来存储二维码的 配置信息Map map = new HashMap();//设置二维码的误差校正级别 例如墨水不清晰,打印出来的清晰度,拍出来的图像//L 7% M 15% Q 25% H 30%  容错率,容错率越高,二维码越容易被识别map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置二维码的字符集map.put(EncodeHintType.CHARACTER_SET,charset);//设置二维码四周的留白map.put(EncodeHintType.MARGIN,2);//第二步:创建 ZXing 对象,MultiFormatWriter(多格式写入)//通过 MultiFormatWriter 创建一个二维码对象,MultiFormatWriter writer = new MultiFormatWriter();
//        writer.encode(内容 , 什么格式的二维码 , 二维码宽度 , 二维码高度 , 二维码参数);//BarcodeFormat 枚举 二维码类型 QR_CODE 最普通的   Aztec code//返回 位矩阵对象 (内部实际上是 一个二维数组,每一个元素是boolean类型的  true代表黑色,false代表白色)BitMatrix encode = writer.encode(s, BarcodeFormat.QR_CODE, 800, 800, map);//获得矩阵的宽度和高度int width = encode.getWidth();int height = encode.getHeight();//生成二维码图片BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//编写一个嵌套循环 遍历 位矩阵对象 填充二维码图片for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {//判断当前坐标是否是黑色boolean color = encode.get(x, y);//如果是黑色,就设置为黑色if (color) {bufferedImage.setRGB(x, y, 0x000000);  //   0x000000是黑色} else {bufferedImage.setRGB(x, y, 0xffffff); //   0xffffff是白色}}}

添加部分:

//给二维码添加logoFile file1 = new File("D:\\Users\\lenovo\\Desktop\\詹姆斯蓝色chosen1.jpg");Image logo = ImageIO.read(file1);  //logo图片//对获取到的log进行缩放int logoHeight = logo.getHeight(null);int logoWidth = logo.getWidth(null);if (logoWidth > 60){logoWidth = 60;}if (logoHeight > 60){logoHeight = 60;}//下面对logo进行缩放 重要    返回一个缩放之后的logo//使用平滑缩放算法(Image.SCALE_SMOOTH) , 避免锯齿Image logoimage = logo.getScaledInstance(logoWidth, logoHeight, Image.SCALE_SMOOTH);//将缩放之后的 logo 放到二维码上//获取2D画笔Graphics2D graphics2D = bufferedImage.createGraphics();//指定 从哪里开始画   (横,纵坐标)int x = (800 - logoWidth) / 2;int y = (800 - logoHeight) / 2;//将缩放之后的logo画上去graphics2D.drawImage(logoimage, x, y, null);//让图片圆润点Shape shape = new RoundRectangle2D.Float(x, y, logoWidth, logoHeight, 10, 10);//logo 边框的粗细graphics2D.setStroke(new BasicStroke(2f));//给logo画graphics2D.draw(shape);//释放画笔graphics2D.dispose();
		String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path+"\\erweima.png");ImageIO.write(bufferedImage, "png", file);System.out.println("图片生成成功");}

技术: Git Hub开源项目 qrcode 实现

首先添加 依赖

<!--		基于 Github QRcode 实现二维码--><dependency><groupId>com.github.liuyueyi.media</groupId><artifactId>qrcode-plugin</artifactId><version>2.5.2</version></dependency>

代码实现——黑白二维码

	public static void qrcode(){//获取 二维码 内容String url = "https://s.weibo.com/weibo?q=%23%E4%B8%80%E8%A7%89%E9%86%92%E6%9D%A53%E4%B8%AA%E4%B8%AD%E5%9B%BD%E4%BA%BA%E4%B8%8A%E5%A4%A9%E4%BA%86%23&t=31&band_rank=1&Refer=top";try {//生成黑白的二维码BufferedImage bufferedImage = QrCodeGenWrapper.of(url).asBufferedImage();//下载 二维码 图片String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path + "\\ercode.png");//参数一 :BufferedImage对象 , 参数二:图片格式,参数三:输出的地址ImageIO.write(bufferedImage, "png", file);System.out.println("qrcode 生成二维码成功!");} catch (Exception e) {throw new RuntimeException(e);}}

代码实现——带 logo 二维码

public static void qrcode(){//获取 二维码 内容String url = "https://baike.baidu.com/item/%e5%8b%92%e5%b8%83%e6%9c%97%c2%b7%e8%a9%b9%e5%a7%86%e6%96%af/1989503";//生成二维码try {!		//logo 图片!		File file1 = new File("D:\\Users\\lenovo\\Desktop\\詹姆斯蓝色chosen1.jpg");!		//获得图片的输入流!		InputStream inputStream = Files.newInputStream(file1.toPath());//生成黑白的BufferedImage bufferedImage = QrCodeGenWrapper.of(url)!				.setLogo(inputStream)   //设置 logo 图片!				.setLogoRate(7)  //设置 logo 占 二维码的比例  九分之一!				.setLogoStyle(QrCodeOptions.LogoStyle.ROUND)  //将 logo 设置为 圆弧.asBufferedImage();String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path + "\\ercode.png");//参数一 :BufferedImage对象 , 参数二:图片格式,参数三:输出的地址ImageIO.write(bufferedImage, "png", file);System.out.println("qrcode 生成二维码成功!");} catch (Exception e) {throw new RuntimeException(e);}//下载 二维码 图片}

代码实现——彩色的二维码

public static void qrcode(){//获取 二维码 内容String url = "https://baike.baidu.com/item/%e5%8b%92%e5%b8%83%e6%9c%97%c2%b7%e8%a9%b9%e5%a7%86%e6%96%af/1989503";//生成二维码try {//logo 图片File file1 = new File("D:\\Users\\lenovo\\Desktop\\詹姆斯蓝色chosen1.jpg");//获得图片的输入流InputStream inputStream = Files.newInputStream(file1.toPath());//生成黑白的BufferedImage bufferedImage = QrCodeGenWrapper.of(url)!				.setDrawPreColor(Color.CYAN) //设置二维码的颜色.setLogo(inputStream)   //设置 logo 图片.setLogoRate(7)  //设置 logo 占 二维码的比例  九分之一.setLogoStyle(QrCodeOptions.LogoStyle.ROUND)  //将 logo 设置为 圆弧.asBufferedImage();String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path + "\\ercode.png");//参数一 :BufferedImage对象 , 参数二:图片格式,参数三:输出的地址ImageIO.write(bufferedImage, "png", file);System.out.println("qrcode 生成二维码成功!");} catch (Exception e) {throw new RuntimeException(e);}//下载 二维码 图片}

代码实现——带有背景图

public static void qrcode(){//获取 二维码 内容String url = "https://baike.baidu.com/item/%e5%8b%92%e5%b8%83%e6%9c%97%c2%b7%e8%a9%b9%e5%a7%86%e6%96%af/1989503";//生成二维码try {//logo 图片File file1 = new File("D:\\Users\\lenovo\\Desktop\\詹姆斯蓝色chosen1.jpg");//获得图片的输入流InputStream inputStream = Files.newInputStream(file1.toPath());//生成黑白的BufferedImage bufferedImage = QrCodeGenWrapper.of(url)!				.setBgImg(inputStream) //设置背景图片!				.setBgOpacity(0.4f)  //设置透明度 0-1 越大越透明.asBufferedImage();String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path + "\\ercode.png");//参数一 :BufferedImage对象 , 参数二:图片格式,参数三:输出的地址ImageIO.write(bufferedImage, "png", file);System.out.println("qrcode 生成二维码成功!");} catch (Exception e) {System.out.println("报错了");e.printStackTrace();}//下载 二维码 图片}

代码实现——设置特殊形状

public static void qrcode(){//获取 二维码 内容String url = "https://baike.baidu.com/item/%e5%8b%92%e5%b8%83%e6%9c%97%c2%b7%e8%a9%b9%e5%a7%86%e6%96%af/1989503";//生成二维码try {//生成黑白的BufferedImage bufferedImage = QrCodeGenWrapper.of(url)!				.setDrawEnableScale(true)  //启动 二维码绘制时的缩放     设置形状必须开启!!!!				.setDrawStyle(QrCodeOptions.DrawStyle.DIAMOND)   //设置二维码的样式 为钻石.asBufferedImage();String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path + "\\ercode.png");//参数一 :BufferedImage对象 , 参数二:图片格式,参数三:输出的地址ImageIO.write(bufferedImage, "png", file);System.out.println("qrcode 生成二维码成功!");} catch (Exception e) {System.out.println("报错了");e.printStackTrace();}//下载 二维码 图片}

代码实现——生成图片填充二维码

public static void qrcode(){//获取 二维码 内容String url = "https://baike.baidu.com/item/%e5%8b%92%e5%b8%83%e6%9c%97%c2%b7%e8%a9%b9%e5%a7%86%e6%96%af/1989503";//生成二维码try {File file1 = new File("D:\\Users\\lenovo\\Desktop\\詹姆斯蓝色chosen1.jpg");InputStream inputStream = Files.newInputStream(file1.toPath());//生成黑白的BufferedImage bufferedImage = QrCodeGenWrapper.of(url)
!					.setErrorCorrection(ErrorCorrectionLevel.H)  //设置二维码的 容错率
!					.setDrawStyle(QrCodeOptions.DrawStyle.IMAGE)  //绘制二维码时 采用图片填充
!					.addImg(1,1,inputStream).asBufferedImage();String path = "D:\\Users\\lenovo\\Desktop\\xxl-job代码\\xxl-job\\xxl-job-admin\\src\\main\\resources\\static";File file = new File(path + "\\ercode.png");//参数一 :BufferedImage对象 , 参数二:图片格式,参数三:输出的地址ImageIO.write(bufferedImage, "png", file);System.out.println("qrcode 生成二维码成功!");} catch (Exception e) {System.out.println("报错了");e.printStackTrace();}//下载 二维码 图片}

相关文章:

  • Web开发主流前后端框架总结
  • (eNSP)配置WDS手拉手业务
  • 激光干涉仪:解锁协作机器人DD马达的精度密码
  • Vue3基础
  • 自动化测试工具playwright中文文档-------18.模拟
  • 解决el-cascader组件下拉选项过长,数据回显无法换行显示的问题
  • 【计算机网络】第3章:传输层—TCP 拥塞控制
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 容器(Container)语法知识点及案例代码详解(4)
  • matlab模糊控制实现路径规划
  • haribote原型系统改进方向
  • 153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划
  • Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
  • 通光散基因组-文献精读139
  • Mask篇 (含引导层、不规则遮罩)
  • 2025 Vscode插件离线下载方式
  • sql入门语句-案例
  • 【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)
  • 网络编程之网络基础
  • C++ 新特性详解:Lambda 表达式全解析(含实战案例)
  • 概念全解析:结构化数据,半结构化数据,非结构化数据分别是什么意思?
  • 电商网站系统建设/百度竞价推广开户内容
  • 杭州做网站/苏州优化排名seo
  • 怎么做地下彩票网站/小程序自助搭建平台
  • 简单的美食网站模板/怎么开网店新手入门
  • 5网站建站/中国三大搜索引擎
  • 做门户网站cms/长春seo优化