| package com.hxh.basic.project.Test02; |
| |
| import com.alibaba.fastjson.JSON; |
| import com.google.zxing.BarcodeFormat; |
| import com.google.zxing.EncodeHintType; |
| import com.google.zxing.client.j2se.MatrixToImageWriter; |
| import com.google.zxing.common.BitMatrix; |
| import com.google.zxing.qrcode.QRCodeWriter; |
| import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.util.Hashtable; |
| |
| public class Test { |
| public static void main(String[] args) { |
| String str = "123456"; |
| getQRCodeImage(str); |
| } |
| |
| |
| |
| |
| private static final int QR_CODE_DEFAULT_WIDTH = 320; |
| |
| |
| |
| |
| private static final String QR_CODE_DEFAULT_CHARSET = "utf-8"; |
| |
| |
| |
| |
| |
| |
| |
| public static String getQRCodeImage(String inputString) { |
| System.out.println(String.format("UserServiceImpl.getQRCodeImage request inputString=%s", inputString)); |
| |
| String result = ""; |
| try { |
| QRCodeWriter qrCodeWriter = new QRCodeWriter(); |
| Hashtable hints = new Hashtable(); |
| hints.put(EncodeHintType.CHARACTER_SET, QR_CODE_DEFAULT_CHARSET); |
| BitMatrix bitMatrix = qrCodeWriter.encode(inputString, BarcodeFormat.QR_CODE, QR_CODE_DEFAULT_WIDTH, QR_CODE_DEFAULT_WIDTH, hints); |
| bitMatrix = deleteWhite(bitMatrix); |
| ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream(); |
| MatrixToImageWriter.writeToStream(bitMatrix, "png", pngOutputStream); |
| result = "data:image/png;base64," + Base64.encode(pngOutputStream.toByteArray()); |
| System.out.println(String.format("base64 res=%s", result)); |
| } catch (Exception e) { |
| System.out.println(String.format("UserServiceImpl.getQRCodeImage exception! 错误信息=%s", e)); |
| System.out.println(String.format("com.jd.crm.gateway.service.user.impl.UserServiceImpl.getQRCodeImage(java.lang.String):result=%s", JSON.toJSON(result))); |
| return "错误"; |
| } |
| return result; |
| } |
| |
| |
| |
| |
| |
| |
| |
| private static BitMatrix deleteWhite(BitMatrix matrix) { |
| int[] rec = matrix.getEnclosingRectangle(); |
| int resWidth = rec[2] + 1; |
| int resHeight = rec[3] + 1; |
| |
| BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); |
| resMatrix.clear(); |
| for (int i = 0; i < resWidth; i++) { |
| for (int j = 0; j < resHeight; j++) { |
| if (matrix.get(i + rec[0], j + rec[1])) { |
| resMatrix.set(i, j); |
| } |
| } |
| } |
| return resMatrix; |
| } |
| } |
| |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~