大家好,我是何三,80后老猿,独立开发者。
继续我们的"5分钟Python自动化"系列。今天我们来点既实用又有趣的——用Python生成自定义二维码。
有这样的场景:你想分享一个网址给朋友,但长链接又乱又难记;你想给产品添加联系方式,但手写电话容易出错;你想在活动中快速引导用户,但打印一沓纸质指引太麻烦...
传统做法:找在线二维码生成网站,上传内容、下载图片,步骤繁琐,还有广告和水印。
Python做法:5行代码,3秒钟,生成专属定制二维码,想要什么样式就什么样式!
今天,我就带你用5分钟,掌握这个让分享变得优雅的酷炫技能!
环境准备:一个命令搞定
在开始之前,你只需要:
- 安装Python(这个已经装好了)
- 安装二维码生成库:打开命令行,输入:
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秒生成你的第一个二维码
- 保存脚本:将上面的代码保存为
generate_qrcode.py - 修改内容:把网址换成你想分享的内容
- 运行脚本:打开命令行,输入:
bash python generate_qrcode.py - 查看结果:在当前目录找到
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自动化技巧!