python中使用qrcode库生成二维码时,填充logo变成黑白色的解决方法。

本文详细介绍了使用Python生成带有Logo的二维码(QRCode)的过程。通过调整颜色模式为RGB,确保生成的二维码为白底黑码。并演示了如何将Logo图片按比例缩小并融合到二维码中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python如何生成qrcode的教程已经有很多了,我这里仅仅排一下坑。

import qrcode
from PIL import Image


qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=4
)
qr.add_data('https://blog.youkuaiyun.com/github_38854366')
qr.make(fit=True)
# 问题就出在这个地方,如果要生成白底黑码的二维码必须要在这里以RGB的方式指定颜色。
img = qr.make_image(fill_color="#000", back_color="#FFF")
img_w, img_h = img.size
factor = 4
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon = Image.open("logo.png")
icon_w, icon_h = icon.size
if icon_w > size_w:
    icon_w = size_w
if icon_h > size_h:
    icon_h = size_h
icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
img.paste(icon, (w, h), icon)
img.save('qrcode.png')

至于为什么要用RGB来指定黑白色,我认为是默认的black,white生成的图是黑白图,每个像素点只有0和1两种状态。而用RGB来指定颜色,则生成的是彩色图。一个是只有黑白两色,一个是只用了黑白两种颜色,那么彩色图在两种图里的表现就不言而喻了吧。当然,我也没有很细致地去考究,欢迎指正。

### 如何使用 Python 生成Logo 或图片的二维码 要实现带有 Logo二维码功能,可以基于 `qrcode` 扩展其功能。通过调整模块参数并结合图像处理(如 PIL),可以在二维码中心嵌入一张小型图片作为标志。 以下是完整的代码示例: ```python import qrcode from PIL import Image, ImageDraw def create_qr_with_logo(qr_text, logo_path, output_path): # 创建 QRCode 对象,并设置误差校正等级为 H (最高级) qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) # 添加数据到二维码对象中 qr.add_data(qr_text) qr.make(fit=True) # 使用指定颜色填充二维码,默认黑色前景白色背景 fill_color = "black" back_color = "white" # 获取二维码图像 img = qr.make_image(fill_color=fill_color, back_color=back_color).convert('RGB') # 打开Logo 图片 logo = Image.open(logo_path) # 计算Logo尺寸比例,使其适配二维码中间区域 width, height = img.size factor = min(width, height) / 5 # 控制Logo大小占整体的比例 size = int(factor), int(factor) # 调整Logo大小 logo = logo.resize(size, Image.ANTIALIAS) # 将Logo放置在二维码中央位置 position = ((width - size[0]) // 2, (height - size[1]) // 2) img.paste(logo, position, mask=logo.convert("RGBA")) # 保存最终结果 img.save(output_path) # 测试函数调用 create_qr_with_logo( qr_text="https://www.example.com", logo_path="logo.png", output_path="qr_with_logo.png" ) ``` #### 参数说明 - **qr_text**: 需要在二维码中编码的文字或链接。 - **logo_path**: 嵌入二维码中的 Logo 文件路径。 - **output_path**: 输出二维码文件名及其存储路径。 此方法利用了 Pillow (`PIL`) 来加载和缩放 Logo 图像,并将其粘贴至二维码的核心部分[^1]。同设置了较高的错误纠正级别以确保即使有遮挡也能正常解码[^2]。 #### 注意事项 为了保证最佳效果,请选用透明底色或者单色背景的小型 PNG/JPG 格式的 Logo 图片。如果原始 Logo 过大,则可能影响二维码识别率;因此需合理控制其尺寸与二维码总体面积之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值