You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python生成包含独立文本与图片(Logo)的QR Code?

可以用Python实现同时包含文本与图片的二维码,分两种场景处理:

场景1:扫描后解析出文本+图片内容

这种方案是把文本和图片数据(或地址)打包成结构化数据存入二维码,扫描后解析数据即可同时获取并展示两者,适合需要扫描后同时呈现文本和图片的需求。

实现步骤:

  1. 安装依赖:
pip install qrcode[pil] pillow
  1. 代码实现:
import qrcode
import json
import base64
from PIL import Image

# 定义要存储的文本和本地Logo路径
text_info = "这是要展示的文本内容"
logo_file = "logo.png"

# 将Logo转为Base64编码(方便打包进JSON)
with open(logo_file, "rb") as f:
    logo_base64 = base64.b64encode(f.read()).decode("utf-8")

# 把文本和图片数据打包成JSON格式
qr_payload = json.dumps({
    "text": text_info,
    "image": logo_base64
})

# 生成高容错二维码(避免数据量过大导致识别失败)
qr = qrcode.QRCode(
    version=3,  # 版本越高可存储数据越多,根据实际调整
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=8,
    border=4
)
qr.add_data(qr_payload)
qr.make(fit=True)

# 生成并保存二维码图片
final_qr = qr.make_image(fill_color="black", back_color="white")
final_qr.save("text_image_combined_qr.png")

# ------------------------------
# 模拟扫描后的解析操作
# ------------------------------
# from pyzbar.pyzbar import decode
# # 读取二维码并解析数据
# decoded_result = decode(Image.open("text_image_combined_qr.png"))
# parsed_data = json.loads(decoded_result[0].data.decode("utf-8"))
# # 提取文本
# print("文本内容:", parsed_data["text"])
# # 将Base64转回图片
# recovered_logo = base64.b64decode(parsed_data["image"])
# with open("recovered_logo.png", "wb") as f:
#     f.write(recovered_logo)

注意事项:

  • Base64编码会增大数据体积,若图片较大,需调高二维码的version参数,同时保持高容错级别(ERROR_CORRECT_H)。
  • 如果图片是网络地址,也可以直接把URL存入JSON,无需转Base64,扫描后直接通过URL加载图片。

场景2:视觉上带Logo的二维码(扫描后仅获取文本)

这种方案是在普通文本二维码的中心叠加Logo图片,不影响二维码的识别功能,扫描后仍得到文本,Logo仅作为视觉装饰,适合需要品牌展示但核心信息是文本的场景。

代码实现:

import qrcode
from PIL import Image

# 生成文本二维码
text_content = "扫描后得到的文本信息"
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_H,  # 高容错确保Logo不干扰识别
    box_size=10,
    border=4
)
qr.add_data(text_content)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="black", back_color="white").convert("RGB")

# 加载并调整Logo大小(建议不超过二维码的1/5)
logo = Image.open("logo.png")
qr_width, qr_height = qr_image.size
logo_size = int(qr_width / 5)
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)

# 计算Logo的中心位置
logo_pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)

# 叠加Logo到二维码上(支持透明背景的Logo)
qr_image.paste(logo, logo_pos, mask=logo if logo.mode == "RGBA" else None)

# 保存最终二维码
qr_image.save("qr_with_visual_logo.png")

注意事项:

  • Logo尺寸不能过大,否则会遮挡二维码的识别区域,建议控制在二维码宽度的1/5以内。
  • 使用高容错级别(ERROR_CORRECT_H)可以最大程度避免Logo对识别的影响。

内容的提问来源于stack exchange,提问作者veoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:35:13