Skip to content
Posts Jun 24, 2023 1 min read

QR Code Generator with Python

A Python script using the qrcode library to generate customizable QR codes with error correction, including options for masking specific areas of the code.

QR Code Generator with Python
import qrcode
from PIL import Image, ImageDraw

def create_qr_code(data, box_size, border):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,  # 30% error correction
        box_size=box_size,
        border=border,
    )
    qr.add_data(data)
    qr.make()
    img = qr.make_image(fill_color='black', back_color='white').convert('RGBA')
    img.save("!qrcode.png")
    return img

def create_mask(img, squares):
    mask = Image.new('1', img.size, 0)  # '1' for black and white
    draw = ImageDraw.Draw(mask)
    for square in squares:
        draw.rectangle(square, fill=1)  # fill the defined areas with white
    mask_img = Image.new('RGBA', img.size, (0, 0, 0, 0))  # create with full transparency
    mask_img.paste(img, mask=mask)
    mask_img.save('!qrcode-mask.png')

def main():
    # Data you want to encode
    data = "trimad.github.io/post/2023-06-24-qr"

    # Define global variables
    box_size = 32
    border = 2
    padding = border*box_size

    img = create_qr_code(data, box_size, border)

    # Define the size of squares
    position_pattern = 8*box_size+((border-1)*box_size)``

    # Define coordinates for 8x8 squares at the corners and an additional 5x5 square
    squares = [
        (padding, padding, position_pattern-1, position_pattern-1), 
        (img.size[0] - position_pattern, padding, img.size[0] - padding-1, position_pattern-1), 
        (padding, img.size[1] - position_pattern, position_pattern-1, img.size[1] - padding-1),
        (28*box_size+padding, 28*box_size+padding, (28+5)*box_size+padding-1, (28+5)*box_size+padding-1)
    ]

    create_mask(img, squares)

if __name__ == "__main__":
    main()

Connected Reading

Related entries

Chosen from shared tags, categories, and nearby section context.

Discovery Layer

Connected Memory

A focused relationship view around this entry, using shared categories and tags.

Categories 0
Tags 0
Posts 0