Chào bạn, hôm nay chúng ta sẽ cùng khám phá một chủ đề thú vị: lập trình tạo QR bằng Java. Nếu bạn là một người yêu công nghệ và luôn cập nhật những xu hướng mới, bạn chắc chắn đã thấy mã QR ở khắp mọi nơi từ các blog, website cho đến những địa điểm công cộng. Sự phổ biến của chúng thể hiện rõ nét trong các ứng dụng di động, nơi bạn chỉ cần dùng ứng dụng quét mã QR để đọc thông tin văn bản hoặc chuyển hướng đến một trang web nếu đó là URL.
Tôi tình cờ tìm hiểu về công nghệ này gần đây và thực sự thấy nó rất hấp dẫn. Nếu bạn muốn tìm hiểu sâu hơn về mã QR, bạn có thể tìm thấy rất nhiều thông tin hữu ích tại trang Wikipedia về Mã QR.
Lập trình tạo QR bằng Java
Khi bắt gặp hình ảnh mã QR xuất hiện dày đặc trên các website, tôi bắt đầu tìm kiếm một công cụ tạo mã QR bằng Java. Tôi đã xem xét một số API mã nguồn mở và thấy zxing
nổi lên như một lựa chọn đơn giản và tối ưu nhất để sử dụng. Nếu bạn muốn tạo một hình ảnh mã QR, chúng ta chỉ cần thư viện core
của nó. Bạn hãy thêm dependency sau vào dự án Maven của mình:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.2</version>
</dependency>
Nếu bạn muốn đọc hình ảnh QR thông qua dòng lệnh, chúng ta cần sử dụng thư viện JavaSE
của zxing
. Bạn có thể thêm dependency sau cho mục đích này:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.2</version>
</dependency>
Điều này cũng báo hiệu bạn sẽ cần thêm hai thư viện bổ sung khác để chạy ứng dụng từ dòng lệnh. Chúng ta sẽ cùng tìm hiểu cách thêm các file JAR này vào classpath
để chạy ứng dụng client đọc mã QR ở phần sau của bài hướng dẫn.
Ví dụ zxing tạo ảnh mã QR
Đây là chương trình bạn có thể sử dụng để tạo ảnh mã QR với API của zxing
. File GenerateQRCode.java
của chúng ta sẽ trông như thế này:
package com.journaldev.qrcode.generator;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class GenerateQRCode {
public static void main(String[] args) throws WriterException, IOException {
String qrCodeText = "<https://www.journaldev.com>";
String filePath = "JD.png";
int size = 125;
String fileType = "png";
File qrFile = new File(filePath);
createQRImage(qrFile, qrCodeText, size, fileType);
System.out.println("DONE");
}
private static void createQRImage(File qrFile, String qrCodeText, int size, String fileType)
throws WriterException, IOException {
// Tạo ByteMatrix cho mã QR mã hóa chuỗi đã cho
Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<>();
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix byteMatrix = qrCodeWriter.encode(qrCodeText, BarcodeFormat.QR_CODE, size, size, hintMap);
// Tạo BufferedImage để chứa mã QR
int matrixWidth = byteMatrix.getWidth();
BufferedImage image = new BufferedImage(matrixWidth, matrixWidth, BufferedImage.TYPE_INT_RGB);
image.createGraphics();
Graphics2D graphics = (Graphics2D) image.getGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, matrixWidth, matrixWidth);
// Vẽ và lưu hình ảnh bằng ByteMatrix
graphics.setColor(Color.BLACK);
for (int i = 0; i < matrixWidth; i++) {
for (int j = 0; j < matrixWidth; j++) {
if (byteMatrix.get(i, j)) {
graphics.fillRect(i, j, 1, 1);
}
}
}
ImageIO.write(image, fileType, qrFile);
}
}
Chương trình này tạo ra một file ảnh mã QR có tên JD.png
, trỏ đến URL của JournalDev. Bạn có thể sử dụng ứng dụng quét mã QR trên điện thoại di động để kiểm tra. Nó sẽ dẫn bạn đến trang chủ của JournalDev.
Ví dụ zxing đọc mã QR
Nếu bạn chưa có ứng dụng di động để kiểm tra, đừng lo lắng. Bạn hoàn toàn có thể đọc mã QR bằng API zxing
thông qua dòng lệnh. Dưới đây là lệnh để đọc file ảnh mã QR:
$java -cp $HOME/.m2/repository/com/google/zxing/javase/3.3.2/javase-3.3.2.jar:.:$HOME/.m2/repository/com/google/zxing/core/3.3.2/core-3.3.2.jar:$HOME/.m2/repository/com/beust/jcommander/1.72/jcommander-1.72.jar:$HOME/.m2/repository/com/github/jai-imageio/jai-imageio-core/1.3.1/jai-imageio-core-1.3.1.jar com.google.zxing.client.j2se.CommandLineRunner JD.png
Lưu ý các file JAR bổ sung trong classpath
mà zxing
phụ thuộc (ví dụ: jcommander
, jai-imageio-core
). Lệnh này sẽ hiển thị nội dung của mã QR ngay trên terminal của bạn.
Chúng ta đã cùng nhau trải nghiệm cả quá trình tạo và đọc mã
Kết luận
Tóm lại, chúng ta đã cùng nhau khám phá cách sử dụng thư viện zxing
để tạo QR bằng Java. Bạn đã biết cách thêm các dependencies
cần thiết vào dự án Maven, triển khai mã để tạo ra một ảnh QR tùy chỉnh từ một chuỗi văn bản hoặc URL và thậm chí là đọc lại nội dung của nó ngay trên dòng lệnh. Bạn có thể tích hợp chức năng tạo mã QR vào các ứng dụng quản lý tài sản, hệ thống bán lẻ để theo dõi sản phẩm, hoặc sử dụng mã QR để đơn giản hóa quá trình đăng nhập và xác thực người dùng.