手机端ZXing生成二维码
时间: 2025-05-14 10:56:21 浏览: 17
### 如何在移动端利用 ZXing 库实现二维码生成
要在移动端使用 ZXing 庿生成二维码,可以借助 Spring Boot 后端服务完成二维码的生成,并通过前端展示给用户。以下是详细的说明:
#### 1. **引入依赖**
为了在 Spring Boot 中使用 ZXing 工具库,需要先在项目的 `pom.xml` 文件中添加 ZXing 的 Maven 依赖[^2]。
```xml
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
```
以上代码片段展示了如何配置 ZXing 的核心库以及 Java SE 支持库,以便于后续操作。
---
#### 2. **创建二维码生成器**
可以通过编写一个简单的工具类来封装二维码生成功能。以下是一个典型的 QRCodeGenerator 实现示例[^1]:
```java
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.javaxing.EncodeHintType;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
public class QRCodeGenerator {
public static byte[] generateQRCode(String text, int width, int height) throws WriterException {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
BufferedImage bufferedImage = toBufferedImage(bitMatrix);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
} catch (Exception e) {
throw new RuntimeException("Error while writing image.", e);
}
return byteArrayOutputStream.toByteArray();
}
private static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = bufferedImage.createGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, width, height);
graphics.setColor(Color.BLACK);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (matrix.get(i, j)) {
graphics.fillRect(i, j, 1, 1);
}
}
}
graphics.dispose();
return bufferedImage;
}
}
```
上述代码定义了一个静态方法 `generateQRCode`,该方法接受字符串参数并返回字节数组形式的二维码图片数据。
---
#### 3. **构建 RESTful API 接口**
为了让移动设备能够请求二维码资源,在 Spring Boot 控制器中暴露一个接口供客户端调用:
```java
@RestController
@RequestMapping("/api/qrcode")
public class QRCodeController {
@GetMapping(value = "/generate", produces = MediaType.IMAGE_PNG_VALUE)
public ResponseEntity<byte[]> generate(@RequestParam String content,
@RequestParam(defaultValue = "200") Integer size) {
try {
byte[] imageData = QRCodeGenerator.generateQRCode(content, size, size);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
return new ResponseEntity<>(imageData, headers, HttpStatus.OK);
} catch (Exception ex) {
return new ResponseEntity<>("Failed to create QR Code", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
```
此控制器接收两个查询参数——`content`(要编码的内容) 和可选的尺寸大小,默认设置为 200 像素宽高。
---
#### 4. **前端调用与显示**
对于移动端应用来说,如果采用 Vue.js 或其他 JavaScript 框架作为前端技术栈,则可以直接发起 HTTP 请求获取 Base64 编码后的 PNG 图片,并将其嵌入到页面中的 `<img>` 标签里[^3]。
下面给出一段简单例子演示如何加载远程服务器上的二维码图像:
```javascript
async function fetchQrCode() {
const response = await axios.get('/api/qrcode/generate', { params: { content: 'https://example.com' }, responseType: 'arraybuffer' });
let base64String = btoa(new Uint8Array(response.data).reduce((data, byte) => data + String.fromCharCode(byte), ''));
document.getElementById('qrcode').src = `data:image/png;base64,${base64String}`;
}
fetchQrCode(); // 调用函数初始化二维码渲染
```
HTML 部分如下所示:
```html
<img id="qrcode" alt="Generated QR Code"/>
```
这样即可实现在 H5 页面或者原生 App 内部动态呈现自动生成好的二维码图案了!
---
阅读全文
相关推荐


















