Tạo Mã QR bằng Python

Tạo Mã QR bằng Python

Giới thiệu mã QR

“QR” là viết tắt của “quick response” – phản hồi nhanh. Mã QR ngày càng được sử dụng rộng rãi nhờ tính tiện lợi khi truy cập thông tin mà không cần nhập liệu thủ công trên điện thoại. Về bản chất, mã QR là một dạng hình ảnh được tạo thành từ các ô vuông trắng đen, bên trong chứa thông tin số hóa có thể quét được. Hiện nay, mã QR xuất hiện ở nhiều nơi như thực đơn điện tử tại nhà hàng, thanh toán không tiếp xúc ở siêu thị, điểm danh nhanh tại sự kiện và nhiều ứng dụng thực tế khác.

Cách tạo mã QR

Như đã đề cập, mã QR là một lưới các ô vuông nhỏ lưu trữ dữ liệu dưới dạng nhị phân (0 và 1). Thông tin được mã hóa dưới dạng đặc biệt trong hình ảnh, đồng thời bạn có thể tùy chỉnh màu sắc, nền và viền miễn là cấu trúc mã không bị thay đổi.
Dưới đây là ví dụ tạo mã QR bằng thư viện Python “qrcode”:
Image 1: QR code
Bài viết này sẽ giới thiệu cách sử dụng thư viện qrcode trong Python, từ cài đặt đến các tính năng nâng cao để thiết kế mã QR theo ý muốn.

Cài đặt thư viện

Đầu tiên, bạn cần cài đặt các thư viện cần thiết. Ở đây sử dụng PyCharm, nhưng bạn có thể dùng bất kỳ môi trường Python nào. Để cài đặt thư viện “qrcode”, mở terminal và nhập:


pip install qrcode

Image 2: The latest PowerShell with new features and improvements is installed and a command line with installing qrcode is showing
Sau khi cài xong, bạn đã có thể tạo mã QR và lưu dưới dạng file PNG hoặc hiển thị trực tiếp trong Python. Nếu muốn xử lý ảnh nâng cao hơn, bạn nên cài thêm thư viện Pillow để hỗ trợ thao tác ảnh.


pip install "qrcode[pil]"

Image 3: Code snippet displaying the output of a successful Pillow installation in a Python environment

Nhập thư viện và tạo mã QR cơ bản

Bắt đầu lập trình, bạn chỉ cần nhập thư viện với tên viết tắt cho tiện thao tác. Theo tài liệu Python QR Code, bạn có thể tạo và lưu nhanh mã QR cho một đường dẫn như sau:


import qrcode as qr
img = qr.make("https://pypi.org/project/qrcode/")
img.save("Python QR Code Documentaion.png")

Image 4: A black and white QR code on a white background
Đây là ví dụ mã QR đơn giản, tạo bởi hàm make() và lưu thành file PNG nhờ save().

Tính năng nâng cao

Để sử dụng các tính năng nâng cao khi tạo ảnh, ta sẽ dùng class QRCode trong thư viện qrcode.
Khái niệm lớp (class) và đối tượng (object) là nền tảng cơ bản trong lập trình. Lớp giúp tạo ra nhiều đối tượng cùng thuộc tính (biến) và phương thức (hàm). Ta sẽ tận dụng class này để tạo mã QR dưới dạng đối tượng.
Dưới đây là đoạn mã mẫu tạo và lưu mã QR:


import qrcode
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)
qr.add_data('https://towardsdatascience.com/implementing-the-coffee-machine-project-in-python-using-object-oriented-programming/')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("Understanding Classes and Objects.png")

Image 5: A black and white QR code
Tiếp theo, chúng ta sẽ cùng phân tích chi tiết đoạn mã trên và tìm hiểu các tùy chỉnh khác nhau.

Khởi tạo đối tượng

Dòng đầu sau khi import sẽ khởi tạo đối tượng QRCode với các tham số:


qr = qrcode.QRCode(
    ...
)

Ở đây, qrcode là tên thư viện, còn QRCode() là class.

Chọn phiên bản (version)

Tham số version có thể chọn số nguyên từ 1 đến 40, mỗi giá trị tương ứng một kích thước mã QR khác nhau.


import qrcode
qr = qrcode.QRCode(
    version=1,
    ...
)

Ví dụ, đặt version là 5:
Image 6: A square QR code consisting of black squares on a white background
Và khi chọn version là 15:
Image 7: A QR code containing scannable information
Bạn có thể thấy, giá trị version càng lớn thì mã QR càng to. Giá trị nhỏ nhất là lưới 21×21 ô vuông.

Sửa lỗi (error correction)

Tham số tiếp theo là error_correction, quyết định khả năng phục hồi dữ liệu khi mã QR bị hỏng một phần. Có 4 mức độ:

  • L (Thấp): sửa lỗi tối đa 7%
  • M (Trung bình): 15%
  • Q (Cao): 25%
  • H (Rất cao): 30%, phù hợp với môi trường dễ trầy xước, bám bẩn

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    ...
)

Cấp độ sửa lỗi càng cao, mã QR càng dễ đọc khi bị hư, nhưng kích thước mã cũng tăng theo, dữ liệu khó nén hơn.
So sánh các loại sửa lỗi:
Image 8: A black and white QR code
L – sửa lỗi thấp
Image 9: A square QR code with a white background and black modules, featuring three larger squares in the corners
M – sửa lỗi trung bình
Image 10: A square QR code with a complex pattern of black squares on a white background, featuring three larger square markers in the corners
Q – sửa lỗi cao
Image 11: A QR code
H – sửa lỗi rất cao
Dễ thấy, mức sửa lỗi càng cao thì mã QR càng phức tạp, dung lượng lớn hơn nhưng khả năng phục hồi tốt hơn.

Kích thước ô vuông (box_size)

Tham số box_size quy định số pixel cho mỗi ô vuông trong mã QR.


qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    ...
)

Thay đổi giá trị này sẽ làm mã QR lớn hoặc nhỏ hơn về mặt hình ảnh:
Image 12: QR code
Box Size = 1
Image 13: A two-dimensional barcode (QR code) in black and white squares
Box Size = 100
Image 14: Two QR codes with different box sizes
Các ảnh trên minh họa sự khác nhau về kích thước ô vuông khi thay đổi thông số này.

Viền (border)

Tham số cuối cùng khi tạo đối tượng là border – số ô viền xung quanh mã QR. Giá trị tối thiểu là 4, có thể tăng thêm nếu muốn.
Image 15: A square QR code with a white background and black dots, surrounded by a gray border
Border = 4
Image 16: Square QR code with black and white colors and with a thick black border
Border = 10
Bạn có thể dễ dàng kiểm soát độ dày viền bằng tham số này.

Thêm dữ liệu vào mã QR

Sau khi khởi tạo đối tượng với các tham số như trên, bạn thêm dữ liệu cần mã hóa bằng phương thức add_data(). Dữ liệu có thể là chuỗi, URL, vị trí, thông tin liên hệ…


import qrcode
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=1,
    border=10,
)
qr.add_data('https://towardsdatascience.com/building-a-facial-recognition-model-using-pca-svm-algorithms-c81d870add16/')
qr.make(fit=True)

Dòng qr.make(fit=True) sẽ tự động điều chỉnh kích thước mã QR phù hợp với lượng dữ liệu.

Tạo ảnh mã QR

Sau khi tạo xong đối tượng mã QR, bạn có thể dùng Pillow để xuất ra hình ảnh, tùy chỉnh màu sắc và lưu lại. Ví dụ, đổi nền sang đen, màu mã thành hồng:


import qrcode
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=1,
    border=10,
)
qr.add_data('https://towardsdatascience.com/using-python-to-build-a-calculator/')
qr.make(fit=True)
img = qr.make_image(fill_color="pink", back_color="black")
img.save("calc.png")

Image 17: Pink QR code on a black background

Kết luận

Trong bài viết này, bạn đã tìm hiểu về thư viện QR Code trong Python, cách tạo mã QR và lưu lại dưới nhiều định dạng. Ngoài ra, bạn còn biết cách tùy chỉnh các thông số nâng cao khi tạo mã QR, cũng như ứng dụng kiến thức về lớp và đối tượng trong lập trình Python. Đây là hướng dẫn phù hợp cho người mới bắt đầu, chỉ cần nắm được kiến thức cơ bản về class và object là có thể làm theo.
Tham khảo thêm các gợi ý ChatGPT sáng tạo nội dung hay nhất của tôi

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top