怎么用 Python 制作各種用途的二維碼?


當(dāng)你提到二維碼時(shí),大多數(shù)人想到的是倉(cāng)庫(kù)管理或產(chǎn)品標(biāo)簽等 "工業(yè) "應(yīng)用,但這篇文章在很大程度上是關(guān)于二維碼的個(gè)人和社會(huì)用途。
有趣的事實(shí)
二維(QR)碼是在1994年發(fā)明的,最近幾年由于新冠肺炎的出現(xiàn),它的"非接觸 "特性使其應(yīng)用廣泛。
二維碼具備良好的解決方案。它可以被幾乎所有的手機(jī)使用默認(rèn)的照片應(yīng)用程序掃描,同樣,掃描它們也會(huì)根據(jù)它們的背景觸發(fā)某種動(dòng)作。
例如,一個(gè)含有URL的QR碼允許你在瀏覽器中打開它。含有Wifi登錄信息的二維碼允許你立即連接。含有聯(lián)系人詳細(xì)信息的二維碼允許您在地址簿中創(chuàng)建一個(gè)新的聯(lián)系人。帶有地理坐標(biāo)的二維碼允許你在地圖上找到一個(gè)位置。這使掃描者的生活變得非常容易,并使信息提供者完全脫離......他們不再需要為了發(fā)生互動(dòng)而在場(chǎng)。
開始
在開始之前,我做了一些研究,并選擇了Python中的segno模塊,因?yàn)樗腥娴墓δ芰斜砗推恋奈臋n。在谷歌搜索Python中的QR碼時(shí),它并沒有出現(xiàn)在最前面,甚至在模塊名稱中也沒有 "QR",但不要因此而放棄--它是一個(gè)很棒的工具。
讓我們先用 .make()
方法創(chuàng)建一個(gè)最簡(jiǎn)單的QR碼。它只包含可以復(fù)制或傳輸?shù)脑紨?shù)據(jù),由于內(nèi)容很短, segno
默認(rèn)創(chuàng)建一個(gè)有趣的 "微型QR "碼。
pip install segno
import segno
price_tag = segno.make("£9.99")
price_tag.save("Price Tag.png")

你也可以使用方便的 .show
方法,而不是用 .save
來創(chuàng)建一個(gè)文件,然后導(dǎo)航到它,顯示它,使用后再刪除它。這將創(chuàng)建一個(gè)臨時(shí)圖像文件,并在你的默認(rèn)圖像查看器中自動(dòng)打開。這對(duì)調(diào)試或測(cè)試很有幫助,特別是當(dāng)你開始試驗(yàn)不同的顏色和背景圖像,并想確認(rèn)QR碼仍能正常掃描時(shí)。
用于分享URL的QR碼
使用同樣的方法和稍大的有效載荷,我第一個(gè)任務(wù)(分享視頻信息)的Python代碼是微不足道的。
import segno
video = segno.make('https://youtu.be/px6FeOKD3Zc')
video.save('Video.png', scale=4)

只需多寫一行代碼,我就能創(chuàng)建一個(gè)更加豐富多彩的QR碼,在這種情況下,我最喜歡的一張圖片實(shí)際上是一個(gè)用Piet編程語言編寫的 "Hello World "腳本。
pip install qrcode-artistic
import segno
piet = segno.make('https://esolangs.org/wiki/Piet', error='h')
piet.to_artistic(background="background.png", target='Piet.png', scale=16)

攜帶WIFI詳細(xì)信息的QR碼
我的第二個(gè)任務(wù)(WIFI登錄細(xì)節(jié))的Python代碼也同樣簡(jiǎn)單,但我定制了顏色并使輸出更大。
import segno
wifi_settings = {
? ?ssid='(Wifi Name)',
? ?password='(Wifi Password)',
? ?security='WPA',
}
wifi = segno.helpers.make_wifi(**wifi_settings)
wifi.save("Wifi.png", dark="yellow", light="#323524", scale=8)

聯(lián)系信息的二維碼
在這些快速成功的鼓勵(lì)下,我決定為一個(gè)朋友的藝術(shù)和手工藝業(yè)務(wù)創(chuàng)建一個(gè)二維碼。
import segno
vcard = segno.helpers.make_vcard(
? ?name='Pxxx;Jxxx',
? ?displayname='Times Tables Furniture',
? ?email=('jxxxpxxx@timestables.furniture'),
? ?url=[
? ? ? ?'https://www.etsy.com/uk/shop/TimesTablesFurniture',
? ? ? ?'https://www.facebook.com/profile.php?id=100083448533180'
? ?],
? ?phone="+44xxxxxxxxxx",
)
img = vcard.to_pil(scale=6, dark="#FF7D92").rotate(45, expand=True)
img.save('Etsy.png')

對(duì)于我自己的VCard,我選擇添加我公司的標(biāo)志作為背景。
import segno
awsom = segno.helpers.make_vcard(
? ?name='Fison;Pete',
? ?displayname='AWSOM Solutions Ltd.',
? ?email=('pxxxfxxx@awsom.solutions'),
? ?url=[
? ? ? ?'https://twitter.com/awsom_solutions',
? ? ? ?'https://medium.com/@petefison',
? ? ? ?'https://github.com/pfython'
? ?],
? ?phone="+44xxxxxxxxxx",
)
awsom.to_artistic(
? ?background="logo.png",
? ?target='AWSOM.png',
? ?scale=6,
? ?quiet_zone="#D29500"
)

用于其他目的的二維碼
segno
API還允許你做以下事情。
segno.helpers.make_email
: 發(fā)送一封預(yù)先準(zhǔn)備好主題和內(nèi)容的電子郵件。對(duì)于訂閱新聞簡(jiǎn)報(bào),或者從郵件服務(wù)器上觸發(fā)任何可能的行動(dòng),都是非常好的。
segno.helpers.make_epc_qr
: 發(fā)起一個(gè)電子支付。
segno.helpers.make_geo
: 在一個(gè)特定的經(jīng)度和緯度打開默認(rèn)的地圖應(yīng)用。
segno.make_sequence
: 使用 "結(jié)構(gòu)化附加 "模式創(chuàng)建一個(gè)QR碼序列。
把所有東西都保存在內(nèi)存中
如果你喜歡把所有的處理保持在 "內(nèi)存中",而不是在硬盤或服務(wù)器上創(chuàng)建文件,你可以創(chuàng)建一個(gè)PIL圖像對(duì)象,或者使用BytesIO保存一個(gè)類似文件的對(duì)象:
import segno
beatle = segno.make('Paul McCartney')
beatle = qrcode.to_pil()
import segno
import io
beatle = segno.make('Paul McCartney')
buff = io.BytesIO()
beatle.save(buff, kind='svg')
同樣,如果你喜歡直接從URL中加載背景圖片到內(nèi)存中,而不是先在硬盤或服務(wù)器上創(chuàng)建一個(gè)文件,你可以使用urlopen方法。
from urllib.request import urlopen
import segno
beatle = segno.make('Ringo Starr', error='h')
url = 'https://media.giphy.com/media/HNo1tVKdFaoco/giphy.gif'
bg_file = urlopen(url)
beatle.to_artistic(background=bg_file, target='ringo.gif', scale=10)
二維碼的創(chuàng)造性、家用式的想法
希望這篇短文能讓您對(duì)使用二維碼有興趣,不僅僅是用于 "工業(yè) "項(xiàng)目,而且還用于個(gè)人和社會(huì)項(xiàng)目。網(wǎng)上有很多文章,建議將二維碼創(chuàng)造性地用于商業(yè)和營(yíng)銷,因此,在本文的最后,我想分享一些我自己的 "家用式 "想法,可能會(huì)吸引你。
在你的垃圾桶邊上有關(guān)于回收規(guī)則的信息
觸發(fā)一封電子郵件給親人,說你已經(jīng)安全到家。
觸發(fā)一個(gè)更新,說你已經(jīng)離開了家。
在你所在的城鎮(zhèn)或鄉(xiāng)村道路上尋寶;鏈接到你自己的網(wǎng)站,包括當(dāng)?shù)匦畔?、社?huì)媒體團(tuán)體、當(dāng)前的地理位置等。
在你的房子周圍為年幼的孩子尋寶,或舉行晚宴。
在明信片上貼上二維碼,讓家人和朋友直接進(jìn)入你的旅行日記、照片日記或博客中的最新條目。
洗衣機(jī)、微波爐、烤箱、打印機(jī)、鍋爐、3D打印機(jī)、激光切割器、甚至汽車等電器的說明書。
你的家譜或歷史,或財(cái)產(chǎn)信息保存起來供后人參考。
一個(gè)在線留言簿,游客可以記錄他們的逗留,并留下個(gè)人的信息。
冰箱上的貼紙,鏈接到最新的家庭購(gòu)物清單。
每個(gè)家庭成員的每周家務(wù)事清單。
筆記本電腦、電話、相機(jī)、無人機(jī)等的 "如果丟失,請(qǐng)歸還...... "貼紙。
誠(chéng)信箱--讓人們?cè)谑褂?消費(fèi)/購(gòu)買東西時(shí)付款,例如,從共享冰箱中的食物和飲料,在農(nóng)場(chǎng)外出售的雞蛋。
預(yù)約管理電視/互聯(lián)網(wǎng)/游戲的特權(quán)。
嬰兒保姆或?qū)櫸锉D返木o急聯(lián)系信息。
在停電的情況下為你提供緊急聯(lián)絡(luò)方式--水、電、煤氣。
為你看家護(hù)院的人提供當(dāng)?shù)氐氖称放渌凸尽?/p>
個(gè)人視頻信息/提醒。
關(guān)于你最喜歡的裝飾品或房子周圍的藝術(shù)品的信息。
你的酒架/酒窖的品酒說明。
花園植物和樹木的標(biāo)簽--物種、澆水、年齡等細(xì)節(jié)。
OK,這期內(nèi)容就到這里。另外,為大家準(zhǔn)備了一份全套編程學(xué)習(xí)大禮包!
內(nèi)容有:Python,java,大數(shù)據(jù),前端,人工智能等編程語言的視頻教程、實(shí)戰(zhàn)項(xiàng)目、經(jīng)典書籍、畢設(shè)項(xiàng)目以及面試題等。
希望大家都可以快樂學(xué)編程~
需要的點(diǎn)我頭像,私信:“學(xué)習(xí)”? 即可~
