无需打开直接搜索微信:本司针对手游进行,选择我们的四大理由: ...
2025-08-16 0
你有没有发现:
现在任何东西都能整出个二维码?
二维码已经彻底渗透到我们生活的每个角落。作为一名干了八年 Java 的程序员(主要在摸鱼,但也干活),我最近接到一个需求:
“我们要给用户生成动态的登录二维码,另外还要支持活动海报、带 logo 的分享码、临时访客二维码、带参数的推广码……你搞一下,应该不难吧?”
我嘴上说着“简单”,心里却在想:
你知道二维码有多少种花样吗?!
我们先冷静分析一下业务需求,把“二维码”拆解成几个典型的应用场景:
场景名称 | 特点描述 |
登录二维码 | 临时有效,常变化,内容是一个 token 或 URL |
活动海报二维码 | 嵌入图片中,需高颜值,对清晰度有要求 |
带 logo 的二维码 | 中间加 logo 图标,用户更容易识别品牌 |
参数推广二维码 | 携带用户 ID、推广码等参数,可用于追踪来源 |
临时访客二维码 | 时间敏感,可能加密,甚至设定失效时间 |
简而言之,二维码不仅是一个图,还要“有脑子” 。
在 Java 世界,要生成二维码,主流有两个选择:
我选的是 ZXing + 自定义封装。
理由如下:
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.5.2</version></dependency><dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.5.2</version></dependency>
package com.moyu.qr;import com.google.zxing.*;import com.google.zxing.client.j2se.MatrixToImageConfig;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.nio.file.Path;import java.util.HashMap;import java.util.Map;/** * 天天摸鱼的 Java 工程师出品 * 通用二维码生成工具类 */public class QrCodeUtils { /** * 生成普通二维码并保存为图片文件 * * @param content 二维码内容 * @param filePath 保存路径(绝对路径) * @param width 宽度 * @param height 高度 * @throws Exception */ public static void generateSimpleQrCode(String content, String filePath, int width, int height) throws Exception { // 编码参数设置 Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 编码类型 hints.put(EncodeHintType.MARGIN, 1); // 边距 BitMatrix bitMatrix = new MultiFormatWriter().encode( content, BarcodeFormat.QR_CODE, width, height, hints ); Path path = new File(filePath).toPath(); MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path); } /** * 生成带 Logo 的二维码 * * @param content 二维码内容 * @param logoPath logo 图片路径 * @param outputPath 输出二维码路径 */ public static void generateQrCodeWithLogo(String content, String logoPath, String outputPath) throws Exception { int width = 300; int height = 300; Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.MARGIN, 1); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 容错率高,避免 logo 遮挡 BitMatrix bitMatrix = new MultiFormatWriter().encode( content, BarcodeFormat.QR_CODE, width, height, hints ); // 生成二维码图像 BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig()); // 加载 logo 图片 BufferedImage logo = ImageIO.read(new File(logoPath)); int logoWidth = qrImage.getWidth() / 5; int logoHeight = qrImage.getHeight() / 5; // 计算 logo 放置位置(居中) int x = (qrImage.getWidth() - logoWidth) / 2; int y = (qrImage.getHeight() - logoHeight) / 2; // 合并图片 Graphics2D g = qrImage.createGraphics(); g.drawImage(logo, x, y, logoWidth, logoHeight, null); g.dispose(); ImageIO.write(qrImage, "PNG", new File(outputPath)); }}
public class Main { public static void main(String[] args) throws Exception { String content = "https://yourdomain.com/register?ref=userid_123456"; String savePath = "D:/qrcode/promo.png"; QrCodeUtils.generateSimpleQrCode(content, savePath, 300, 300); System.out.println("推广二维码生成成功,快去扫码看看!"); }}
public class LogoDemo { public static void main(String[] args) throws Exception { String content = "https://yourapp.com/share?id=abc123"; String logo = "D:/logo/logo.png"; String output = "D:/qrcode/share_with_logo.png"; QrCodeUtils.generateQrCodeWithLogo(content, logo, output); System.out.println("带 Logo 的二维码已生成!"); }}
别看二维码只有黑白小格子,其背后能承载的业务逻辑、营销策略、用户行为追踪,可比你写的 if else 高级多了。
记住一句老话:
“二维码是连接线下与线上最朴素、最强大的桥梁。 ”
相关文章
观点网讯:8月15日,针对市场关于“抖音电商将打通即时零售与电商业务,并同步调整团队组织架构”的传闻,抖音方面回应表示,仅为内部业务管理方式调整。免责...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,广州赛通科技有限公司取得一项名为“一种多功能LoRa自组网网关及多功能LoRa自组网系统”的专...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,泰州市天润合成化工有限公司取得一项名为“一种树脂生产的新型反应釜”的专利,授权公告号CN223...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,江苏微舟甯海生物科技有限公司申请一项名为“基于智能冷库的入库识别存储管理系统”的专利,公开号C...
2025-08-16 0
亲,这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,四川蜀旺辰昇新材料有限责任公司申请一项名为“TFT无碱玻璃基板的边缘电磁屏蔽强化方法”的专利,...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,上海酷想智能科技有限公司取得一项名为“一种可载人拆零拣选的升降式穿梭车”的专利,授权公告号CN...
2025-08-16 0
发表评论