大家好,我是何三,80后老猿,独立开发者。

继续我们的"5分钟Python自动化"系列。今天我们来点既实用又有趣的——用Python生成自定义二维码

有这样的场景:你想分享一个网址给朋友,但长链接又乱又难记;你想给产品添加联系方式,但手写电话容易出错;你想在活动中快速引导用户,但打印一沓纸质指引太麻烦...

传统做法:找在线二维码生成网站,上传内容、下载图片,步骤繁琐,还有广告和水印。

Python做法:5行代码,3秒钟,生成专属定制二维码,想要什么样式就什么样式!

今天,我就带你用5分钟,掌握这个让分享变得优雅的酷炫技能!

环境准备:一个命令搞定

在开始之前,你只需要:

  1. 安装Python(这个已经装好了)
  2. 安装二维码生成库:打开命令行,输入: bash pip install qrcode[pil] 这个命令会安装两个库:
    • qrcode:二维码生成的核心库
    • PIL(Pillow):图像处理库,用于生成图片文件

就是这么简单!一个命令,解锁二维码生成超能力!

核心代码:5行基础二维码

让我们先看看这个最简单的"二维码魔法":

import qrcode

# 创建二维码对象
qr = qrcode.QRCode(version=1, box_size=10, border=4)

# 添加数据(可以是网址、文字、联系方式等)
qr.add_data("https://www.h3blog.com")
qr.make(fit=True)

# 生成二维码图片
img = qr.make_image(fill_color="black", back_color="white")
img.save("my_qrcode.png")

print("二维码生成成功!")

逐行详解:理解二维码的生成逻辑

第1行:导入魔法工具箱

import qrcode

这行代码告诉Python:"我要使用二维码生成功能"。

第3-4行:配置二维码参数

qr = qrcode.QRCode(version=1, box_size=10, border=4)

创建二维码对象时,可以设置几个重要参数: - version:控制二维码的复杂程度(1-40,数字越大越复杂) - box_size:每个小方块包含的像素数 - border:边框的宽度(推荐至少4)

第6-7行:添加数据并生成

qr.add_data("https://www.h3blog.com")
qr.make(fit=True)
  • add_data():添加你想要编码的内容,可以是:
  • 网址:"https://..."
  • 文字:"Hello World!"
  • 联系方式:"tel:13800138000"
  • WiFi信息:"WIFI:S:MyNetwork;T:WPA;P:Password;;"
  • make(fit=True):自动调整版本以适应数据量

第9-10行:生成并保存图片

img = qr.make_image(fill_color="black", back_color="white")
img.save("my_qrcode.png")
  • make_image():生成图片对象,可以设置颜色
  • save():保存为图片文件

实战演示:3秒生成你的第一个二维码

  1. 保存脚本:将上面的代码保存为generate_qrcode.py
  2. 修改内容:把网址换成你想分享的内容
  3. 运行脚本:打开命令行,输入: bash python generate_qrcode.py
  4. 查看结果:在当前目录找到my_qrcode.png,用手机扫码试试!

生成效果

📱 扫描结果 → 跳转到你的GitHub主页!

举一反三:打造个性化二维码

这个库的强大之处在于它的灵活性!你可以轻松定制各种风格的二维码:

案例1:生成彩色二维码

import qrcode

qr = qrcode.QRCode()
qr.add_data("https://www.h3blog.com")
qr.make(fit=True)

# 创建彩色二维码
img = qr.make_image(
    fill_color="blue",      # 二维码颜色
    back_color="yellow"     # 背景颜色
)
img.save("colorful_qrcode.png")

案例2:添加Logo到二维码中心

import qrcode
from PIL import Image

# 生成基础二维码
qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
qr.add_data("https://www.h3blog.com")
qr.make(fit=True)

img = qr.make_image(fill_color="black", back_color="white").convert('RGB')

# 添加Logo
logo = Image.open("logo.png")  # 你的Logo文件
logo_size = 80  # Logo大小

# 调整Logo尺寸
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)

# 计算Logo位置(居中)
pos = ((img.size[0] - logo_size) // 2, (img.size[1] - logo_size) // 2)

# 粘贴Logo
img.paste(logo, pos)
img.save("qrcode_with_logo.png")

案例3:生成渐变色彩色二维码

import qrcode
from PIL import Image, ImageDraw

def create_gradient_qr(data, colors):
    qr = qrcode.QRCode()
    qr.add_data(data)
    qr.make(fit=True)

    # 创建渐变背景
    base_img = Image.new('RGB', (300, 300), colors[0])
    draw = ImageDraw.Draw(base_img)

    for i in range(300):
        # 计算渐变颜色
        ratio = i / 300
        r = int(colors[0][0] * (1 - ratio) + colors[1][0] * ratio)
        g = int(colors[0][1] * (1 - ratio) + colors[1][1] * ratio)
        b = int(colors[0][2] * (1 - ratio) + colors[1][2] * ratio)
        draw.line([(0, i), (300, i)], fill=(r, g, b))

    # 生成二维码并合成
    qr_img = qr.make_image(fill_color="black", back_color="white")
    qr_img = qr_img.resize((300, 300))

    # 将二维码与渐变背景合成
    result = Image.new('RGB', (300, 300))
    for x in range(300):
        for y in range(300):
            qr_pixel = qr_img.getpixel((x, y))
            if qr_pixel == 0:  # 黑色部分
                result.putpixel((x, y), base_img.getpixel((x, y)))
            else:  # 白色部分
                result.putpixel((x, y), (255, 255, 255))

    return result

# 使用示例
gradient_qr = create_gradient_qr(
    "https://www.h3blog.com",
    [(255, 0, 0), (0, 0, 255)]  # 从红色到蓝色的渐变
)
gradient_qr.save("gradient_qrcode.png")

案例4:批量生成二维码

import qrcode
import os

# 要生成二维码的数据列表
urls = {
    "github": "https://github.com/pojoin",
    "website": "https://www.h3blog.com",
    "email": "mailto:466867714@qq.com",
    "twitter": "https://twitter.com/hesan"
}

# 创建输出文件夹
os.makedirs("qrcodes", exist_ok=True)

# 批量生成
for name, url in urls.items():
    qr = qrcode.QRCode()
    qr.add_data(url)
    qr.make(fit=True)

    img = qr.make_image(fill_color="darkblue", back_color="lightgray")
    img.save(f"qrcodes/{name}_qrcode.png")
    print(f"已生成: {name}_qrcode.png")

print("批量生成完成!")

进阶技巧:专业级二维码生成

调整容错率

qr = qrcode.QRCode(
    error_correction=qrcode.constants.ERROR_CORRECT_H  # 最高容错率
)

容错率级别: - ERROR_CORRECT_L:约7%的码字可被修正 - ERROR_CORRECT_M:约15%的码字可被修正(默认) - ERROR_CORRECT_Q:约25%的码字可被修正 - ERROR_CORRECT_H:约30%的码字可被修正

生成SVG矢量二维码

import qrcode
import qrcode.image.svg

# 创建SVG格式的二维码
factory = qrcode.image.svg.SvgImage
qr = qrcode.QRCode(image_factory=factory)
qr.add_data("https://www.h3blog.com")
qr.make(fit=True)

img = qr.make_image(fill_color="red", back_color="yellow")
img.save("vector_qrcode.svg")

创建圆形点状的创意二维码

import qrcode
from PIL import Image, ImageDraw

class CircleQRImage(qrcode.image.base.BaseImage):
    def __init__(self, border, width, box_size):
        self.border = border
        self.width = width
        self.box_size = box_size
        self.size = (width + border * 2) * box_size
        self._image = Image.new("RGB", (self.size, self.size), "white")
        self._draw = ImageDraw.Draw(self._image)

    def drawrect(self, row, col):
        box_x = (col + self.border) * self.box_size
        box_y = (row + self.border) * self.box_size

        # 画圆形而不是方形
        self._draw.ellipse([
            box_x, box_y,
            box_x + self.box_size - 1,
            box_y + self.box_size - 1
        ], fill="black")

# 使用自定义样式
qr = qrcode.QRCode(image_factory=CircleQRImage)
qr.add_data("https://www.h3blog.com")
qr.make(fit=True)

img = qr.make_image(fill_color="black", back_color="white")
img.save("circle_qrcode.png")

实用场景:二维码的多种用途

生成WiFi连接二维码

def create_wifi_qr(ssid, password, encryption='WPA'):
    wifi_data = f"WIFI:T:{encryption};S:{ssid};P:{password};;"

    qr = qrcode.QRCode()
    qr.add_data(wifi_data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="green", back_color="white")
    img.save("wifi_qrcode.png")
    print("WiFi二维码已生成!")

# 使用示例
create_wifi_qr("MyHomeWiFi", "MyPassword123")

生成联系人信息二维码

def create_contact_qr(name, phone, email, website):
    contact_data = f"MECARD:N:{name};TEL:{phone};EMAIL:{email};URL:{website};;"

    qr = qrcode.QRCode()
    qr.add_data(contact_data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="purple", back_color="white")
    img.save("contact_qrcode.png")

# 使用示例
create_contact_qr(
    "何三",
    "13800138000",
    "contact@hesan.blog",
    "https://hesan.blog"
)

注意事项与最佳实践

选择合适的内容长度

  • 短文本:使用较低版本(version=1-5)
  • 长网址:使用较高版本(version=10-15)
  • 非常长的内容:考虑使用URL短链接服务

颜色对比度要足够

确保二维码颜色与背景色有足够对比度,否则可能无法扫描。

测试扫描效果

生成后务必用多个扫码工具测试,确保兼容性。

结语:让信息传递更优雅

恭喜!在又一个5分钟内,你掌握了一个既实用又有趣的技能:

✅ 用5行代码生成基础二维码 ✅ 掌握二维码的颜色和样式定制 ✅ 学会添加Logo和创建渐变效果 ✅ 具备批量生成和专业级定制能力

今天你学会的不仅仅是生成二维码,而是掌握了一种优雅的信息传递方式。

想象一下,你还可以: - 为你的博客文章生成分享二维码 - 制作个性化的电子名片 - 为活动制作引导二维码 - 创建产品说明书二维码 - 制作WiFi连接二维码贴纸

二维码是数字世界与现实世界的桥梁,而你现在就是这座桥梁的建筑师。

现在,就为你最常访问的网站生成一个个性化二维码吧!在评论区分享你的创意设计和实用场景!

记得关注我,下一篇我们挑战更有趣的Python自动化技巧!