从零开始用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. 颜色适配:前景色和背景色对比要强烈(如深色前景 + 浅色背景),避免相近色导致扫描失败。
相关推荐
摘星编程2 小时前
深入理解CANN ops-nn BatchNormalization算子:训练加速的关键技术
python
魔芋红茶2 小时前
Python 项目版本控制
开发语言·python
lili-felicity2 小时前
CANN批处理优化技巧:从动态批处理到流水线并行
人工智能·python
一个有梦有戏的人2 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python
夏幻灵2 小时前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星2 小时前
javascript之二重循环练习
开发语言·javascript·数据库
摘星编程2 小时前
解析CANN ops-nn中的Transpose算子:张量维度变换的高效实现
python
Mr Xu_2 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝2 小时前
RBAC前端架构-01:项目初始化
前端·架构
Liekkas Kono2 小时前
RapidOCR Python 贡献指南
开发语言·python·rapidocr