日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python qrcode 生成个性的透明二维码

發布時間:2024/3/12 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python qrcode 生成个性的透明二维码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求生成這樣的批量生成這樣的二維碼,用MyQR生成的不是很滿意,沒有去細研究MyQR,所以用qrcode 和PIL生成。(歡迎批評)

# _*_ coding:utf-8 _*_''' 創建時間:2020-12-07 文件說明:生成個性的帶背景圖的二維碼 '''import os import sys import qrcode from PIL import Image, ImageDrawBase_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(Base_DIR)whiteRGB = (255,255,255,255) # 白色RGB值 blackRGB = (0,0,0,255) # 黑色RGB值class GenerateQRCode(object):'''生成透明帶背景圖的二維碼返回圖片'''# 初始化參數def __init__(self, background_map, version=5, error_correction=qrcode.ERROR_CORRECT_H, box_size=8, border=2):self.version = version # 版本信息self.error_correction = error_correction # 容錯率self.box_size = box_size # 二維碼位置確定的點數self.border = border # 邊框self.background_map = background_map# 白色背景透明設置def __transparent_back(self,image):img = image.convert('RGBA')L, H = img.sizecolor_0 = whiteRGB #要替換的顏色for h in range(H):for l in range(L):dot = (l,h)color_1 = img.getpixel(dot)if color_1 == color_0:color_1 = color_1[:-1] + (0,)img.putpixel(dot,color_1)return img# 計算二維碼黑點白點位置def __position(self,coordinate):Tlist = list()Flist = list()rnum = int(self.box_size/(self.box_size/2))clen = len(coordinate)numy = 0for y in coordinate:if self.border - 1 < numy < self.box_size + self.border:numx = 0for x in y:if self.box_size + self.border <= numx < clen - (self.box_size + self.border): if x == True: # 計算出坐標位置wx = int(numx*self.box_size) + rnumhy = int(numy*self.box_size) + rnumTlist.append((wx,hy))elif x == False:wx = int(numx*self.box_size) + rnumhy = int(numy*self.box_size) + rnumFlist.append((wx,hy))numx += 1elif self.box_size + self.border <= numy < clen - (self.box_size + self.border):numx = 0for x in y:if self.border - 1 < numx < clen - self.border:if x == True:wx = int(numx*self.box_size) + rnumhy = int(numy*self.box_size) + rnumTlist.append((wx,hy))else:wx = int(numx*self.box_size) + rnumhy = int(numy*self.box_size) + rnumFlist.append((wx,hy))numx += 1elif clen - (self.box_size + self.border) <= numy < clen - self.border:numx = 0for x in y:if self.box_size + self.border <= numx < clen - self.border : if x == True:wx = int(numx*self.box_size) + rnumhy = int(numy*self.box_size) + rnumTlist.append((wx,hy))elif x == False:wx = int(numx*self.box_size) + rnumhy = int(numy*self.box_size) + rnumFlist.append((wx,hy))numx += 1numy += 1return Tlist,Flist# 生成二維碼def Qrcode(self, txt):qr = qrcode.QRCode(version = self.version,error_correction = self.error_correction,box_size = self.box_size,border = self.border,)qr.add_data(txt)qr.make(fit=True)# 獲取二維碼矩陣coordinate = qr.get_matrix()# 獲取生成的二維碼大小qrimg = qr.make_image()qrimg = self.__transparent_back(qrimg)w, h = qrimg.size# 打開背景圖b_map = Image.open(self.background_map)# 設置背景圖大小b_map_image = b_map.resize((w, h), Image.ANTIALIAS)# 獲取黑點和白點的列表(Tlist, Flist) = self.__position(coordinate)'''1、把需要縮小的黑色塊變成白色2、畫出黑色的小塊3、把圖片白色透明4、二維碼圖和背景圖合并5、畫出白色的小方塊'''rnum = int(self.box_size/(self.box_size/2))for n in Tlist:for m in range(self.box_size + 1):for m1 in range(self.box_size + 1):qrimg.putpixel((n[0]-rnum + m1, n[1]-rnum + m),(255,255,255,255))for p in range(rnum + 2):for p1 in range(rnum + 2):qrimg.putpixel((n[0] + p1, n[1]+p),(0,0,0,255))image = self.__transparent_back(qrimg)for n1 in Flist:for p in range(rnum + 2):for p1 in range(rnum + 2):image.putpixel((n1[0] + p1, n1[1]+p),(255,255,255,255))# 保存圖片b_map_image.paste(image, (0, 0), image)save_file = Base_DIR + '/static/code.png'b_map_image.save(save_file, quality=100)if __name__ == "__main__":icon_path = Base_DIR + '/static/logo.jpg'gqrc = GenerateQRCode(background_map=icon_path)gqrc.Qrcode("http://wwww.baidu.com")

總結

以上是生活随笔為你收集整理的Python qrcode 生成个性的透明二维码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。