iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
SideProject30

python基礎及數據科學之應用系列 第 30

python基礎及數據科學之應用day 30[Qrcode資料庫及結語]

  • 分享至 

  • xImage
  •  

鐵人賽結束

第三十天!
/images/emoticon/emoticon05.gif

什麼是二維碼

二維碼(QR碼)是一種編碼數據的方塊圖形矩陣,常用於儲存和快速讀取數據。它是由日本公司Denso Wave於1994年開發的一種矩陣條碼類型。二維碼的優勢在於它可以快速讀取大量數據,並且不需要特殊的掃描設備。它的應用範圍廣泛,具有方便、高效和可靠的特點。它的應用十分廣泛,不需詳細列明。

下載資料庫

>>pip install qrcode

範例:

import qrcode
img = qrcode.make('https://ithelp.ithome.com.tw/articles/10339540')    # 要轉換成 QRCode 的文字
img.show()           
img.save('qrcode.png') 

執行結果:

https://ithelp.ithome.com.tw/upload/images/20231015/201631732QRoB3bkyt.png

QRCode 進階設定

範例:

import qrcode

qr = qrcode.QRCode(
    version = 3,
    error_correction = qrcode.constants.ERROR_CORRECT_Q,
    box_size=15,
    border=1
)
qr.add_data('https://ithelp.ithome.com.tw/articles/10339540')   #在這裡輸入您的網址或文字 
qr.make(fit=True)          # 根據參數製作為 QRCode 物件
img = qr.make_image(fill_color = "red")      # 產生 QRCode 圖片

img.show()
img.save('qrcode2.png')     # 儲存圖片

執行結果:

https://ithelp.ithome.com.tw/upload/images/20231015/20163173tIF0VWDWJw.png

解釋這段程式碼

變數 用途
version QR code的版次,可設定1至40,簡單來說就是二維碼有多複雜。
error_correction 容錯率,分為ERROR_CORRECT_L(7%)、ERROR_CORRECT_M(15%)、ERROR_CORRECT_Q(25%)、ERROR_CORRECT_H(30%),有時候只需掃描部份就可以閱讀到二維碼
box_size 設定像素
border 設定圖片的邊界

QRCode有圖片

我們要在二維碼的中心加入一個圖案,以下就是今次要用圖片,我把它命名為spyc.jpg
https://ithelp.ithome.com.tw/upload/images/20231015/20163173FYm5lOVjBG.jpg

這裏需要用到另外一個資料庫

>>pip install Pillow

範例:

import qrcode
from PIL import Image

qr = qrcode.QRCode(
    version=7,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=15,
    border=1
)

#為二維碼新增數據
qr.add_data("https://www2.pyc.edu.hk/index.php")
qr.make(fit=True)

#從二維碼產生圖像
qr_image = qr.make_image(fill_color="green")

# 打開圖像並調整其大小
with Image.open("spyc.jpg") as pyc:
    qr_width, qr_height = qr_image.size
    pyc_resized = pyc.resize((qr_width // 4, qr_height // 4))

# 計算影像在二維碼上疊加的位置
overlay_x = (qr_width - pyc_resized.width) // 2
overlay_y = (qr_height - pyc_resized.height) // 2

# 將覆蓋影像貼到二維碼影像上
qr_image.paste(pyc_resized, (overlay_x, overlay_y))

qr_image.show()
qr_image.save("qrcode3.png")

執行結果:

https://ithelp.ithome.com.tw/upload/images/20231015/20163173XI3oPph7MI.png

解釋這段程式碼

qr.make_image(fill_color="green")

製作二維碼及將其顏色設定為綠色。

with Image.open("spyc.jpg") as pyc

開啟要用到圖片,這裏用到PIL資料庫的函數。

qr_image.paste

貼上圖片

QRCode漸變色

有時侯二維碼有漸變色會更好看,以下面是一個例子

範例:

import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.colormasks import HorizontalGradiantColorMask

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=2
)

qr.add_data('https://ithelp.ithome.com.tw/articles/10339540')
qr.make(fit=True)

img = qr.make_image(image_factory=StyledPilImage, color_mask=HorizontalGradiantColorMask((255,255,255),(255,0,0),(0,0,255)))

img.show()
img.save('qrcode4.png')

執行結果:

https://ithelp.ithome.com.tw/upload/images/20231015/20163173N9vVqHUWZ4.png
這個例子沒有很難所以就不解釋了。

/images/emoticon/emoticon02.gif

接着是三十天的感想

在這三十天中,我發現我寫程式的實力不足,做過的專案只有幾個,預備時間亦不足,令兩天的內容大量刪減。之前說過會補回的內容應該會在以後我之後在自己的網站補。

鐵人賽的結束,也是下一場旅途的開始

我應該會去繼續練習,也許會找朋友一起製作專案,有興趣的話可以留下你的discord聯絡方式,如果覺得我的文章對你有幫助或有更好的建議,可以追蹤我和不妨在留言區提出,我們明天再見。

reference:
https://steam.oxxostudio.tw/category/python/example/qrcode.html


上一篇
python基礎及數據科學之應用day 29[聊天機械人]
系列文
python基礎及數據科學之應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言