从零开始用Python生成码:自定义样式与Logo嵌入

想要从零开始学习用 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 居中合并到二维码上。

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
    )

关键说明(新手必看)

  1. Logo 图片要求
    • 建议用正方形 PNG 图片(支持透明背景,效果更好);
    • 避免用过大的 Logo(比例建议 0.15-0.25),否则遮挡二维码核心区域导致无法识别;
  2. 透明通道处理paste方法的第三个参数logo_img保留了 Logo 的透明背景,若 Logo 是 JPG(无透明),可去掉该参数;
  3. 常见问题解决
    • 二维码无法识别:调高容错率(ERROR_CORRECT_H)、缩小 Logo 比例、检查二维码内容是否过长;
    • Logo 显示异常:确保 Logo 图片路径正确,优先用 PNG 格式,JPG 需确认无损坏;
  4. 颜色适配:前景色和背景色对比要强烈(如深色前景 + 浅色背景),避免相近色导致扫描失败。
相关推荐
向阳蒲公英8 小时前
Pycharm2025版本配置Anaconda步骤
python
每天吃饭的羊8 小时前
媒体查询
开发语言·前端·javascript
Darkershadow8 小时前
蓝牙学习之uuid与mac
python·学习·ble
北海有初拥8 小时前
Python基础语法万字详解
java·开发语言·python
XiaoYu20028 小时前
第8章 Three.js入门
前端·javascript·three.js
这个一个非常哈8 小时前
element之,自定义form的label
前端·javascript·vue.js
Mqh1807629 小时前
day61 经典时序模型3
python
我想吃烤肉肉9 小时前
logger比print优秀之处
python
阿东在coding9 小时前
Flutter 测试框架对比指南
前端
李瑞丰_liruifengv9 小时前
Claude Agent SDK 最简玩法:几行代码配合 Markdown 轻松搭建 Agent
javascript·人工智能·程序员