最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從零開始使用Python自定義生成二維碼和條形碼

 更新時間:2025年12月31日 08:41:29   作者:站大爺IP  
?二維碼和條形碼已成為現(xiàn)代信息傳遞的重要工具,本文將帶你用Python從零實現(xiàn)碼生成,并掌握自定義樣式和嵌入Logo的核心技巧,希望對大家有所幫助

?二維碼和條形碼已成為現(xiàn)代信息傳遞的重要工具,從支付掃碼到產(chǎn)品溯源,從活動簽到到數(shù)據(jù)存儲,這些黑白方塊和線條背后藏著巨大的應(yīng)用潛力。但默認(rèn)生成的碼往往千篇一律,如何讓它們既實用又美觀?本文將帶你用Python從零實現(xiàn)碼生成,并掌握自定義樣式和嵌入Logo的核心技巧。

一、基礎(chǔ)準(zhǔn)備:選擇合適的Python庫

生成碼的核心是選擇可靠的庫。Python生態(tài)中有多個優(yōu)秀選項:

1.1 二維碼生成:qrcode庫

qrcode是Python最流行的二維碼生成庫,支持多種糾錯級別和尺寸調(diào)整。安裝只需:

pip install qrcode[pil]

[pil]表示同時安裝Pillow圖像處理庫,用于后續(xù)樣式定制)

1.2 條形碼生成:python-barcode庫

對于條形碼(如EAN-13、UPC-A等),python-barcode是專業(yè)選擇:

pip install python-barcode

它支持17種標(biāo)準(zhǔn)條形碼格式,輸出為SVG或PIL圖像。

1.3 圖像處理:Pillow庫

無論二維碼還是條形碼,最終都需要與Logo或背景融合,Pillow(PIL)是Python圖像處理的標(biāo)配:

pip install pillow

二、基礎(chǔ)碼生成:從黑白方塊開始

2.1 生成簡單二維碼

qrcode生成基礎(chǔ)二維碼只需3行代碼:

import qrcode

# 創(chuàng)建二維碼實例
qr = qrcode.QRCode(
    version=1,  # 控制二維碼大?。?-40)
    error_correction=qrcode.constants.ERROR_CORRECT_L,  # 糾錯級別
    box_size=10,  # 每個"點(diǎn)"的像素數(shù)
    border=4,  # 邊框?qū)挾龋▎挝唬篵ox_size)
)

# 添加數(shù)據(jù)
qr.add_data("https://example.com")
qr.make(fit=True)  # 自動調(diào)整尺寸

# 生成圖像并保存
img = qr.make_image(fill_color="black", back_color="white")
img.save("basic_qr.png")

運(yùn)行后會生成一個黑白分明的二維碼圖片。

2.2 生成標(biāo)準(zhǔn)條形碼

以EAN-13格式為例:

import barcode
from barcode.writer import ImageWriter

# 創(chuàng)建條形碼生成器
ean = barcode.get_barcode_class('ean13')
code = ean("5901234123457", writer=ImageWriter())  # EAN-13需要12位數(shù)字

# 保存為PNG文件
filename = code.save("basic_barcode")  # 自動添加.png后綴

生成的條形碼會保存在當(dāng)前目錄。

三、進(jìn)階技巧:自定義碼的樣式

3.1 二維碼顏色定制

通過fill_colorback_color參數(shù)可輕松改變顏色:

img = qr.make_image(
    fill_color="#FF5733",  # 二維碼顏色(支持十六進(jìn)制)
    back_color="#33FF57"   # 背景顏色
)

3.2 二維碼形狀變形

默認(rèn)二維碼是正方形,但可通過module_shape參數(shù)改為圓形或其他形狀(需qrcode 7.0+版本):

from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer

qr = qrcode.QRCode()
qr.add_data("https://example.com")
img = qr.make_image(
    image_factory=StyledPilImage,
    module_drawer=RoundedModuleDrawer(),  # 使用圓形模塊
    eye_drawer=RoundedModuleDrawer()     # 定位圖案也圓形
)
img.save("rounded_qr.png")

3.3 條形碼樣式調(diào)整

python-barcode通過writer參數(shù)控制樣式:

from barcode.writer import ImageWriter

options = {
    "module_width": 0.2,          # 單個條的寬度(mm)
    "module_height": 15.0,        # 條形碼高度(mm)
    "font_size": 10,              # 底部數(shù)字字體大小
    "text_distance": 5.0,         # 數(shù)字與條形碼距離(mm)
    "center_text": True           # 數(shù)字居中
}

ean = barcode.get_barcode_class('ean13')
code = ean("5901234123457", writer=ImageWriter(), writer_options=options)
code.save("styled_barcode")

四、核心技能:在碼中嵌入Logo

4.1 二維碼嵌入Logo

關(guān)鍵步驟:

  • 生成基礎(chǔ)二維碼
  • 用Pillow打開二維碼圖像
  • 打開Logo圖像并調(diào)整大小
  • 將Logo粘貼到二維碼中心
  • 保存最終圖像

完整代碼:

import qrcode
from PIL import Image

def generate_qr_with_logo(data, logo_path, output_path, qr_size=400, logo_size=80):
    # 生成二維碼
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,  # 高糾錯級別(30%容錯)
        box_size=10,
        border=4
    )
    qr.add_data(data)
    qr.make(fit=True)
    
    # 創(chuàng)建二維碼圖像
    img_qr = qr.make_image(fill_color="black", back_color="white").convert("RGB")
    img_qr = img_qr.resize((qr_size, qr_size))  # 調(diào)整二維碼大小
    
    # 打開并調(diào)整Logo
    try:
        img_logo = Image.open(logo_path).convert("RGBA")
        img_logo = img_logo.resize((logo_size, logo_size))
        
        # 計算Logo位置(居中)
        position = ((qr_size - logo_size) // 2, (qr_size - logo_size) // 2)
        
        # 創(chuàng)建帶透明通道的二維碼背景
        img_qr_with_alpha = Image.new("RGBA", img_qr.size, (255, 255, 255, 0))
        img_qr_with_alpha.paste(img_qr, (0, 0))
        
        # 確保Logo區(qū)域可覆蓋(高糾錯級別保障可讀性)
        img_qr_with_alpha.paste(img_logo, position, img_logo)
        
        # 轉(zhuǎn)換為RGB模式保存
        result = img_qr_with_alpha.convert("RGB")
        result.save(output_path)
        print(f"二維碼已保存至: {output_path}")
    except Exception as e:
        print(f"處理Logo時出錯: {e}")
        img_qr.save(output_path)  # 出錯時保存無Logo版本

# 使用示例
generate_qr_with_logo(
    data="https://example.com",
    logo_path="logo.png",
    output_path="qr_with_logo.png",
    qr_size=600,
    logo_size=120
)

4.2 條形碼嵌入Logo(謹(jǐn)慎使用)

條形碼對Logo嵌入更敏感,建議:

  • 將Logo放在條形碼上方/下方空白處
  • 避免遮擋條形碼本身
  • 使用高對比度顏色

示例代碼:

from barcode.writer import ImageWriter
from PIL import Image, ImageDraw, ImageFont

def generate_barcode_with_logo(data, logo_path, output_path):
    # 生成條形碼
    ean = barcode.get_barcode_class('ean13')
    options = {
        "module_width": 0.3,
        "module_height": 30.0,
        "font_size": 12,
        "text_distance": 5.0
    }
    code = ean(data, writer=ImageWriter(), writer_options=options)
    filename = code.save("temp_barcode")  # 臨時保存
    
    # 打開條形碼和Logo
    img_barcode = Image.open("temp_barcode.png")
    try:
        img_logo = Image.open(logo_path).convert("RGBA")
        img_logo = img_logo.resize((100, 50))  # 調(diào)整Logo大小
        
        # 創(chuàng)建新圖像(條形碼高度+Logo高度+間距)
        new_height = img_barcode.height + img_logo.height + 20
        new_img = Image.new("RGB", (img_barcode.width, new_height), "white")
        
        # 粘貼條形碼和Logo
        new_img.paste(img_barcode, (0, 0))
        new_img.paste(img_logo, ((img_barcode.width - img_logo.width) // 2, img_barcode.height + 10), img_logo)
        
        new_img.save(output_path)
        print(f"條形碼已保存至: {output_path}")
    except Exception as e:
        print(f"處理Logo時出錯: {e}")
        img_barcode.save(output_path)  # 出錯時保存無Logo版本
    finally:
        import os
        if os.path.exists("temp_barcode.png"):
            os.remove("temp_barcode.png")

# 使用示例
generate_barcode_with_logo(
    data="5901234123457",
    logo_path="logo.png",
    output_path="barcode_with_logo.png"
)

五、實戰(zhàn)案例:制作活動簽到二維碼

假設(shè)需要為一場活動生成帶Logo的簽到二維碼,要求:

  • 包含活動專屬URL
  • 使用活動主題色
  • 嵌入活動Logo
  • 尺寸適合打?。ˋ4紙每頁4個)

完整解決方案:

import qrcode
from PIL import Image
import os

def generate_event_qr(event_url, logo_path, output_folder, count=100):
    # 確保輸出目錄存在
    os.makedirs(output_folder, exist_ok=True)
    
    # 二維碼配置
    qr_config = {
        "version": 5,  # 較大尺寸以容納更多數(shù)據(jù)
        "error_correction": qrcode.constants.ERROR_CORRECT_H,
        "box_size": 8,
        "border": 2
    }
    
    # 顏色配置(活動主題色)
    fill_color = (0, 102, 204)  # 藍(lán)色
    back_color = (255, 255, 255)  # 白色
    
    # Logo配置
    logo_size = 80  # 像素
    
    for i in range(1, count + 1):
        # 生成帶編號的URL(假設(shè)URL格式為 https://example.com/checkin?id=XXX)
        current_url = f"{event_url}?id={i:03d}"
        
        # 生成二維碼
        qr = qrcode.QRCode(**qr_config)
        qr.add_data(current_url)
        qr.make(fit=True)
        
        # 創(chuàng)建圖像
        img_qr = qr.make_image(fill_color=fill_color, back_color=back_color).convert("RGB")
        img_qr = img_qr.resize((400, 400))  # 最終尺寸
        
        # 處理Logo
        try:
            img_logo = Image.open(logo_path).convert("RGBA")
            img_logo = img_logo.resize((logo_size, logo_size))
            
            # 創(chuàng)建帶透明通道的二維碼
            img_qr_with_alpha = Image.new("RGBA", img_qr.size, (255, 255, 255, 0))
            img_qr_with_alpha.paste(img_qr, (0, 0))
            
            # 粘貼Logo(居中)
            position = ((400 - logo_size) // 2, (400 - logo_size) // 2)
            img_qr_with_alpha.paste(img_logo, position, img_logo)
            
            # 轉(zhuǎn)換為RGB
            final_img = img_qr_with_alpha.convert("RGB")
            
            # 添加編號文字(底部居中)
            draw = ImageDraw.Draw(final_img)
            font = ImageFont.truetype("arial.ttf", 24)  # 使用系統(tǒng)字體
            text = f"簽到碼 #{i:03d}"
            text_width, text_height = draw.textsize(text, font=font)
            draw.text(
                ((400 - text_width) // 2, 370),
                text,
                fill="black",
                font=font
            )
            
            # 保存
            output_path = os.path.join(output_folder, f"qr_{i:03d}.png")
            final_img.save(output_path)
            print(f"已生成: {output_path}")
        except Exception as e:
            print(f"生成簽到碼 {i} 時出錯: {e}")
            # 保存無Logo版本
            img_qr.save(os.path.join(output_folder, f"qr_{i:03d}_no_logo.png"))

# 使用示例
generate_event_qr(
    event_url="https://example.com/checkin",
    logo_path="event_logo.png",
    output_folder="event_qrcodes",
    count=20
)

六、常見問題Q&A

Q1:生成的二維碼掃描不出來怎么辦?

A:檢查以下原因:

  • 糾錯級別設(shè)置過低(建議使用ERROR_CORRECT_H
  • Logo過大遮擋了關(guān)鍵定位圖案(確保Logo不超過二維碼面積的30%)
  • 顏色對比度不足(黑白對比最可靠,彩色需確保明暗差異明顯)
  • 圖像模糊(保存時選擇高DPI,如300dpi)

Q2:如何批量生成不同內(nèi)容的二維碼?

A:將數(shù)據(jù)存儲在列表或CSV文件中,用循環(huán)遍歷生成。例如:

import csv

data_list = [
    {"id": 1, "url": "https://example.com/1"},
    {"id": 2, "url": "https://example.com/2"}
]

for item in data_list:
    qr = qrcode.QRCode()
    qr.add_data(item["url"])
    # ...其余生成代碼...
    img.save(f"qr_{item['id']}.png")

Q3:條形碼和二維碼有什么區(qū)別?

A:

特性二維碼條形碼
數(shù)據(jù)容量可存儲數(shù)百字符通常20-30字符
糾錯能力高(可恢復(fù)30%損壞)低(部分損壞無法識別)
掃描方向360度全向掃描需固定方向掃描
應(yīng)用場景網(wǎng)址、聯(lián)系信息、復(fù)雜數(shù)據(jù)商品價格、庫存管理

Q4:如何調(diào)整二維碼的尺寸?

A:通過box_sizeversion參數(shù)控制:

box_size:每個"點(diǎn)"的像素數(shù)(如設(shè)為10,則10x10像素一個點(diǎn))

version:二維碼版本(1-40),版本越高尺寸越大,可存儲更多數(shù)據(jù)

例如生成大尺寸二維碼:

qr = qrcode.QRCode(
    version=10,  # 較大版本
    box_size=15,  # 每個點(diǎn)15像素
    border=4
)

Q5:生成的圖像有鋸齒怎么辦?

A:在保存時指定抗鋸齒參數(shù)(Pillow的resize方法):

img = img.resize((800, 800), Image.LANCZOS)  # 高質(zhì)量縮放
img.save("smooth_qr.png", dpi=(300, 300))   # 高DPI保存

結(jié)語

從基礎(chǔ)生成到高級定制,Python提供了完整的工具鏈讓碼生成變得簡單而靈活。通過掌握顏色、形狀、Logo嵌入等技巧,你可以創(chuàng)建出既實用又美觀的碼。記?。焊呒m錯級別是Logo嵌入的安全保障,顏色對比度是掃描成功的關(guān)鍵,而批量處理能力則是大規(guī)模應(yīng)用的基石?,F(xiàn)在,用這些知識去設(shè)計你的專屬碼吧!

到此這篇關(guān)于從零開始使用Python自定義生成二維碼和條形碼的文章就介紹到這了,更多相關(guān)Python生成碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python列表與元組操作實現(xiàn)過程

    Python列表與元組操作實現(xiàn)過程

    本文介紹了Python中對列表進(jìn)行排序、臨時排序、反轉(zhuǎn)列表、確定列表長度、遍歷列表、避免縮進(jìn)錯誤、創(chuàng)建數(shù)值列表、列表解析、切片和復(fù)制列表、以及元組的基本用法
    2025-12-12
  • python開發(fā)實時可視化儀表盤的示例

    python開發(fā)實時可視化儀表盤的示例

    這篇文章主要介紹了python開發(fā)實時可視化儀表盤的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05
  • OpenCV+Python幾何變換的實現(xiàn)示例

    OpenCV+Python幾何變換的實現(xiàn)示例

    這篇文章主要介紹了OpenCV+Python幾何變換的實現(xiàn)示例,圖像的幾何變換是指將一幅圖像映射到另一幅圖像內(nèi)。有縮放、翻轉(zhuǎn)、仿射變換、透視、重映射等操作。感興趣的可以了解一下
    2021-03-03
  • matplotlib實現(xiàn)熱成像圖colorbar和極坐標(biāo)圖的方法

    matplotlib實現(xiàn)熱成像圖colorbar和極坐標(biāo)圖的方法

    今天小編就為大家分享一篇matplotlib實現(xiàn)熱成像圖colorbar和極坐標(biāo)圖的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python super()函數(shù)使用及多重繼承

    Python super()函數(shù)使用及多重繼承

    這篇文章主要介紹了Python super()函數(shù)使用及多重繼承,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 零基礎(chǔ)寫python爬蟲之神器正則表達(dá)式

    零基礎(chǔ)寫python爬蟲之神器正則表達(dá)式

    正則表達(dá)式在Python爬蟲中的作用就像是老師點(diǎn)名時用的花名冊一樣,是必不可少的神兵利器。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,它并不是Python的一部分。其他編程語言中也有正則表達(dá)式的概念,區(qū)別只在于不同的編程語言實現(xiàn)支持的語法數(shù)量不同。
    2014-11-11
  • python opencv常用圖形繪制方法(線段、矩形、圓形、橢圓、文本)

    python opencv常用圖形繪制方法(線段、矩形、圓形、橢圓、文本)

    這篇文章主要介紹了python opencv常用圖形繪制方法(線段、矩形、圓形、橢圓、文本),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • pip安裝Python庫時遇到的問題及解決方法

    pip安裝Python庫時遇到的問題及解決方法

    這篇文章主要介紹了pip安裝Python庫時遇到的問題及解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • 在Python的Django框架中創(chuàng)建和使用模版

    在Python的Django框架中創(chuàng)建和使用模版

    這篇文章主要介紹了在Python的Django框架中創(chuàng)建和使用模版的方法,包括使用manage.py shell來幫助設(shè)置模版的方法,需要的朋友可以參考下
    2015-07-07
  • Python基于文件內(nèi)容實現(xiàn)查找文件功能

    Python基于文件內(nèi)容實現(xiàn)查找文件功能

    無論是Linux系統(tǒng)還是Windows系統(tǒng)都有基于文件名實現(xiàn)過濾、查找的功能。但是如果想要查找一些關(guān)于某些文件指定內(nèi)容的文件,好像它們明面上沒有這樣的功能了。這個時候就可以通過 Python 來實現(xiàn)這樣的功能,快跟隨小編一起學(xué)習(xí)一下吧
    2022-05-05

最新評論

海门市| 瓦房店市| 和林格尔县| 云龙县| 淮安市| 嘉定区| 塔城市| 台前县| 金阳县| 临泉县| 安陆市| 喀喇沁旗| 汽车| 莱西市| 汽车| 当雄县| 怀化市| 宁陵县| 响水县| 西昌市| 开鲁县| 宿迁市| 邵武市| 河东区| 洛阳市| 宾川县| 荔波县| 衡水市| 天台县| 灌南县| 榆树市| 紫云| 鄄城县| 色达县| 江油市| 建水县| 彭州市| 红安县| 松滋市| 抚州市| 阳谷县|