从零开始用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. 颜色适配:前景色和背景色对比要强烈(如深色前景 + 浅色背景),避免相近色导致扫描失败。
相关推荐
YiWait几秒前
机器学习导论习题解答
人工智能·python·算法
json{shen:"jing"}几秒前
16_Vue引入路由配置 17.路由传递参数
前端·javascript·vue.js
机器视觉的发动机1 分钟前
大语言模型:从理论起源到技术革命
前端·javascript·自动化·视觉检测·ecmascript·easyui·机器视觉
m0_706653232 分钟前
自动化与脚本
jvm·数据库·python
XerCis2 分钟前
Python读取硬盘信息pySMART——调用smartctl
开发语言·python·硬件架构
流㶡3 分钟前
scikit-learn之KNN算法实战鸢尾花分类
python·算法·scikit-learn·knn
weixin_446504228 分钟前
Akshare:一个实用的免费金融数据Python库
开发语言·python·金融
m0_736034853 小时前
1.28笔记
前端·chrome·笔记
IT陈图图3 小时前
构建 Flutter × OpenHarmony 跨端带文本输入对话框示例
开发语言·javascript·flutter
奔跑的web.8 小时前
TypeScript 装饰器入门核心用法
前端·javascript·vue.js·typescript