想要从零开始学习用 Python 生成二维码(推测你说的 "码" 核心指二维码),并掌握自定义二维码样式(如颜色、大小、边框)和嵌入 Logo 的完整方法,这份指南会从环境搭建到实战实现,全程零基础友好,代码可直接复制运行。
一、前置环境准备
首先安装生成二维码和处理图片的核心库,qrcode负责生成二维码,Pillow(PIL)负责图片编辑(调整 Logo、自定义样式):
bash
# 安装依赖库
pip install qrcode[pil] pillow
qrcode[pil]:包含 PIL 依赖的完整版二维码库,支持图片格式输出;Pillow:Python 主流的图片处理库,用于 Logo 嵌入、颜色调整等。
二、基础二维码生成(无自定义)
先实现最基础的二维码生成,理解核心参数,为后续自定义打基础:
python
import qrcode
# 1. 定义二维码内容(可替换为网址、文字、手机号等)
qr_content = "https://www.example.com"
# 2. 配置二维码基础参数
qr = qrcode.QRCode(
version=1, # 版本(1-40),数字越大二维码越复杂,可自动适配
error_correction=qrcode.constants.ERROR_CORRECT_M, # 容错率(M级:可容错15%)
box_size=10, # 每个小方格的像素大小
border=4, # 边框宽度(默认4,最小1)
)
# 3. 添加内容并生成二维码
qr.add_data(qr_content)
qr.make(fit=True) # fit=True:自动适配版本
# 4. 生成图片并保存
img = qr.make_image(fill_color="black", back_color="white") # 默认黑白样式
img.save("basic_qrcode.png")
print("基础二维码已保存为 basic_qrcode.png")
运行结果 :当前目录生成basic_qrcode.png,扫描可识别出https://www.example.com。
三、自定义二维码样式(颜色 / 大小 / 边框)
基于基础版本,调整二维码的前景色、背景色、方格大小、边框宽度,实现个性化样式:
python
import qrcode
# 1. 自定义参数配置
qr_content = "Python自定义二维码"
qr_version = 2 # 版本升级,适配更多内容
qr_box_size = 15 # 方格更大,二维码整体尺寸增加
qr_border = 2 # 缩小边框
# 自定义颜色(支持英文颜色名、RGB值)
fore_color = (220, 38, 38) # 红色RGB
back_color = (245, 245, 245) # 浅灰色RGB
# 2. 生成二维码
qr = qrcode.QRCode(
version=qr_version,
error_correction=qrcode.constants.ERROR_CORRECT_H, # 高容错率(可容错30%),方便后续嵌入Logo
box_size=qr_box_size,
border=qr_border,
)
qr.add_data(qr_content)
qr.make(fit=True)
# 3. 生成带自定义颜色的图片
img = qr.make_image(fill_color=fore_color, back_color=back_color)
img.save("custom_style_qrcode.png")
print("自定义样式二维码已保存为 custom_style_qrcode.png")
关键参数说明:
error_correction:容错率越高,二维码被遮挡(如 Logo 覆盖)后仍能识别,嵌入 Logo 建议用ERROR_CORRECT_H(最高级);fill_color/back_color:支持"red"等英文名称,也支持(R,G,B)RGB 值(范围 0-255),实现精准配色;box_size:控制二维码整体大小,值越大生成的图片像素越高。
四、嵌入 Logo 到二维码(核心实战)
嵌入 Logo 的核心逻辑是:先生成二维码图片,再读取 Logo 图片,调整 Logo 大小(避免遮挡过多),将 Logo 居中合并到二维码上。
完整代码(含样式自定义 + Logo 嵌入)
python
import qrcode
from PIL import Image
import os
def generate_qrcode_with_logo(
content,
save_path="qrcode_with_logo.png",
logo_path="logo.png", # Logo图片路径(建议用正方形图片,如png格式)
qr_box_size=10,
qr_border=2,
fore_color="black",
back_color="white",
logo_scale=0.2 # Logo大小为二维码的20%(建议0.15-0.25)
):
"""
生成带Logo的自定义二维码
:param content: 二维码内容
:param save_path: 保存路径
:param logo_path: Logo图片路径
:param qr_box_size: 二维码方格大小
:param qr_border: 二维码边框
:param fore_color: 二维码前景色
:param back_color: 二维码背景色
:param logo_scale: Logo相对二维码的大小比例
"""
# 步骤1:生成基础二维码(高容错率)
qr = qrcode.QRCode(
version=None, # 自动适配版本
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=qr_box_size,
border=qr_border,
)
qr.add_data(content)
qr.make(fit=True)
qr_img = qr.make_image(fill_color=fore_color, back_color=back_color).convert("RGBA")
# 步骤2:校验Logo文件是否存在
if not os.path.exists(logo_path):
raise FileNotFoundError(f"Logo文件不存在:{logo_path}")
# 步骤3:读取并处理Logo图片
logo_img = Image.open(logo_path).convert("RGBA")
# 计算Logo大小(基于二维码尺寸)
qr_width, qr_height = qr_img.size
logo_width = int(qr_width * logo_scale)
logo_height = int(qr_height * logo_scale)
# 调整Logo大小(保持比例)
logo_img = logo_img.resize((logo_width, logo_height), Image.Resampling.LANCZOS)
# 步骤4:计算Logo居中位置
pos_x = (qr_width - logo_width) // 2
pos_y = (qr_height - logo_height) // 2
# 步骤5:合并Logo到二维码
qr_img.paste(logo_img, (pos_x, pos_y), logo_img) # 第三个参数是透明通道,保留Logo透明背景
# 步骤6:保存最终图片
qr_img.save(save_path)
print(f"带Logo的二维码已保存为:{save_path}")
# 调用函数生成二维码
if __name__ == "__main__":
# 替换为你的内容和Logo路径
generate_qrcode_with_logo(
content="https://www.example.com",
save_path="my_qrcode.png",
logo_path="logo.png", # 请将此替换为你的Logo图片路径(如本地的logo.png)
qr_box_size=12,
fore_color=(0, 123, 255), # 蓝色RGB
back_color="white",
logo_scale=0.2
)
关键说明(新手必看)
- Logo 图片要求 :
- 建议用正方形 PNG 图片(支持透明背景,效果更好);
- 避免用过大的 Logo(比例建议 0.15-0.25),否则遮挡二维码核心区域导致无法识别;
- 透明通道处理 :
paste方法的第三个参数logo_img保留了 Logo 的透明背景,若 Logo 是 JPG(无透明),可去掉该参数; - 常见问题解决 :
- 二维码无法识别:调高容错率(
ERROR_CORRECT_H)、缩小 Logo 比例、检查二维码内容是否过长; - Logo 显示异常:确保 Logo 图片路径正确,优先用 PNG 格式,JPG 需确认无损坏;
- 二维码无法识别:调高容错率(
- 颜色适配:前景色和背景色对比要强烈(如深色前景 + 浅色背景),避免相近色导致扫描失败。