搜尋
首頁後端開發Python教學介紹python應用學習之qrcode產生二維碼

介紹python應用學習之qrcode產生二維碼

免費學習推薦:python影片教學

python應用學習(一)-qrcode產生二維碼

  • 前言
  • 一、準備
  • 二、程式碼寫
    • 1.引入庫
    • 2.配置初始化參數
    • 3.得到二維碼物件
    • 4.在二維碼中放置logo
    • 5.配置對應資訊並呼叫函數
    • 6.完整程式碼
  • 最後



#前言

本文利用python產生一個自己想要的二維碼,其中程式碼做了註解並於相關知識的解答

一、準備
1、python環境

2、涉及的python函式庫需要

pip install套件名稱 安裝

pip install qrcode

#pip install pillow

二、程式碼寫

1.引入庫

import qrcodefrom PIL import Imageimport osimport sys
2.配置初始化參數


 qr = qrcode.QRCode(
        version=2,  #25*25     二维码的版本号,每一个版本号对应一个尺寸,这里尺寸不是图片的大小而的是二维码长宽被分成的份数
        error_correction=qrcode.constants.ERROR_CORRECT_H,     #纠错容量,指二维码不完整时可以正常识别出原信息的概率(ERROR_CORRECT_H的纠错率最高)
        box_size=8,            #生成图片的像素
        border=1,              #二维码边框宽度    )

3.得到二維碼物件

#

qr.add_data(string)  **#string为想要打开的链接**
    qr.make(fit=True)    #用make()方法生成图片
    img = qr.make_image(fill_color = 'black',back_color = 'white')  #得到二维码对象,并可以通过修改fill_color、back_color参数来调整小格子颜色和背景色
    img = img.convert("RGBA")  #将图片转换为RGBA格式
4.在二維碼中放置logo

if logo and os.path.exists(logo):
        try:
            icon = Image.open(logo)
            img_w, img_h = img.size  #img_w、img_h是二维码的尺寸
        except Exception as e:
            print(e) 
            sys.exit(1)
        factor = 4
        size_w = int(img_w / factor)
        size_h = int(img_h / factor)

        icon_w, icon_h = icon.size   #icon_W、icon_h是logo原始的尺寸        if icon_w > size_w:          #size_W、size_h是二维码尺寸的1/factor
            icon_w = size_w        if icon_h > size_h:
            icon_h = size_h
        icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)   #antialias是平滑处理
        # 保证二维码大小不超过二维码大小的1/factor

        w = int((img_w - icon_w) / 2)  #计算logo在二维码中的相对位置
        h = int((img_h - icon_h) / 2)
        icon = icon.convert("RGBA")
        img.paste(icon, (w, h), icon)  #根据相对位置w、h将logo放到二维码图片上,所以说实际是logo并不是二维码的一部分,会遮挡二维码的一部分,不能太大,否则无法识别
5.配置對應資訊並呼叫函數
if __name__ == "__main__":
    info = "https://blog.csdn.net/weixin_45386875/article/details/113766276"            #二维码的链接
    pic_path = "qr.png"                       #生成的图片保存文件
    logo_path = "logo.png"                    #logo的文件名    gen_qrcode(info, pic_path,logo_path )     #调用函数
6.完整程式碼##
import qrcodefrom PIL import Imageimport osimport sysdef gen_qrcode(string, path, logo=""):
    """
    生成中间带logo的二维码
    需要安装qrcode, PIL库
    @参数 string: 二维码字符串
    @参数 path: 生成的二维码保存路径
    @参数 logo: logo文件路径
    @return: None
    """
    qr = qrcode.QRCode(
        version=2,  #25*25     二维码的版本号,每一个版本号对应一个尺寸,这里尺寸不是图片的大小而的是二维码长宽被分成的份数
        error_correction=qrcode.constants.ERROR_CORRECT_H,     #纠错容量,指二维码不完整时可以正常识别出原信息的概率(ERROR_CORRECT_H的纠错率最高)
        box_size=8,    #生成图片的像素
        border=1,      #二维码边框宽度
    )
    qr.add_data(string)  #string为想要打开的链接
    qr.make(fit=True)    #用make()方法生成图片
    img = qr.make_image(fill_color = 'black',back_color = 'white')  #得到二维码对象,并可以通过修改fill_color、back_color参数来调整小格子颜色和背景色
    img = img.convert("RGBA")  #将图片转换为RGBA格式
    if logo and os.path.exists(logo):
        try:
            icon = Image.open(logo)
            img_w, img_h = img.size  #img_w、img_h是二维码的尺寸
        except Exception as e:
            print(e) 
            sys.exit(1)
        factor = 4
        size_w = int(img_w / factor)
        size_h = int(img_h / factor)

        icon_w, icon_h = icon.size   #icon_W、icon_h是logo原始的尺寸
        if icon_w > size_w:          #size_W、size_h是二维码尺寸的1/factor
            icon_w = size_w        if icon_h > size_h:
            icon_h = size_h
        icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)   #antialias是平滑处理
        # 保证二维码大小不超过二维码大小的1/factor

        w = int((img_w - icon_w) / 2)  #计算logo在二维码中的相对位置
        h = int((img_h - icon_h) / 2)
        icon = icon.convert("RGBA")
        img.paste(icon, (w, h), icon)  #根据相对位置w、h将logo放到二维码图片上,所以说实际是logo并不是二维码的一部分,会遮挡二维码的一部分,不能太大,否则无法识别
    img.save(path)
    # 调用系统命令打开图片
    # xdg - open(opens a file or URL in the user's preferred application)
    #os.system('xdg-open %s' %(path)) #这是Linux系统的命令
    os.startfile(path) #windows 下打开文件if __name__ == "__main__":
    info = "https://blog.csdn.net/weixin_45386875?spm=1010.2135.3001.5343"            #二维码的链接
    pic_path = "qr.png"                       #生成的图片保存文件
    logo_path = "logo.png"                    #logo的文件名
    gen_qrcode(info, pic_path,logo_path )     #调用函数
相關免費學習推薦:#########python教學#########(影片)#########

以上是介紹python應用學習之qrcode產生二維碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
如何使用numpy創建多維數組?如何使用numpy創建多維數組?Apr 29, 2025 am 12:27 AM

使用NumPy創建多維數組可以通過以下步驟實現:1)使用numpy.array()函數創建數組,例如np.array([[1,2,3],[4,5,6]])創建2D數組;2)使用np.zeros(),np.ones(),np.random.random()等函數創建特定值填充的數組;3)理解數組的shape和size屬性,確保子數組長度一致,避免錯誤;4)使用np.reshape()函數改變數組形狀;5)注意內存使用,確保代碼清晰高效。

說明Numpy陣列中'廣播”的概念。說明Numpy陣列中'廣播”的概念。Apr 29, 2025 am 12:23 AM

播放innumpyisamethodtoperformoperationsonArraySofDifferentsHapesbyAutapityallate AligningThem.itSimplifififiesCode,增強可讀性,和Boostsperformance.Shere'shore'showitworks:1)較小的ArraySaraySaraysAraySaraySaraySaraySarePaddedDedWiteWithOnestOmatchDimentions.2)

說明如何在列表,Array.Array和用於數據存儲的Numpy數組之間進行選擇。說明如何在列表,Array.Array和用於數據存儲的Numpy數組之間進行選擇。Apr 29, 2025 am 12:20 AM

forpythondataTastorage,choselistsforflexibilityWithMixedDatatypes,array.ArrayFormeMory-effficityHomogeneousnumericalData,andnumpyArraysForAdvancedNumericalComputing.listsareversareversareversareversArversatilebutlessEbutlesseftlesseftlesseftlessforefforefforefforefforefforefforefforefforefforlargenumerdataSets; arrayoffray.array.array.array.array.array.ersersamiddreddregro

舉一個場景的示例,其中使用Python列表比使用數組更合適。舉一個場景的示例,其中使用Python列表比使用數組更合適。Apr 29, 2025 am 12:17 AM

Pythonlistsarebetterthanarraysformanagingdiversedatatypes.1)Listscanholdelementsofdifferenttypes,2)theyaredynamic,allowingeasyadditionsandremovals,3)theyofferintuitiveoperationslikeslicing,but4)theyarelessmemory-efficientandslowerforlargedatasets.

您如何在Python數組中訪問元素?您如何在Python數組中訪問元素?Apr 29, 2025 am 12:11 AM

toAccesselementsInapyThonArray,useIndIndexing:my_array [2] accessEsthethEthErlement,returning.3.pythonosezero opitedEndexing.1)usepositiveandnegativeIndexing:my_list [0] fortefirstElment,fortefirstelement,my_list,my_list [-1] fornelast.2] forselast.2)

Python中有可能理解嗎?如果是,為什麼以及如果不是為什麼?Python中有可能理解嗎?如果是,為什麼以及如果不是為什麼?Apr 28, 2025 pm 04:34 PM

文章討論了由於語法歧義而導致的Python中元組理解的不可能。建議使用tuple()與發電機表達式使用tuple()有效地創建元組。 (159個字符)

Python中的模塊和包裝是什麼?Python中的模塊和包裝是什麼?Apr 28, 2025 pm 04:33 PM

本文解釋了Python中的模塊和包裝,它們的差異和用法。模塊是單個文件,而軟件包是帶有__init__.py文件的目錄,在層次上組織相關模塊。

Python中的Docstring是什麼?Python中的Docstring是什麼?Apr 28, 2025 pm 04:30 PM

文章討論了Python中的Docstrings,其用法和收益。主要問題:Docstrings對於代碼文檔和可訪問性的重要性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具