Pythonガジェット-QRコード生成_解読器
7638 ワード
考え方:
Qrcodeとpyzbarの2つのパケットを用いて2次元コードの生成と復号を行う.
本明細書で説明する例では、zxingパケットが二次元符号復号を行う関数も保持し、「ピクチャを開く」ボタンの関数を変更することで切り替えることができる.
アイコンを追加するかどうかを選択することで、QRコードに画像を埋め込むかどうかを決定します.
PS,
ネット上で与えられた多くのQRコードの復号パケットはzbarであるが、zbarはPython 2にのみ適用され、Python 3環境では試用されない.
また、pyzbarはQRコードとバーコード(一次元コード)のみをサポートし、マトリクスコードなどの二次元コードはしばらくサポートされていません.一方、zxingは複数のQRコードをサポートすることができるが、zxingパケットを用いて解析を行う場合、bytesではなく文字列を直接出力しjavaのzxingパケットに解析を与えるため、zxingは中国語を含むQRコードを解読できない.
pyzbarでもzxingでもRGBA形式の画像を直接解析することはできません.
ボタンの役割:
画像を開く:QRコード画像を開き、QRコード画像を解析します.
画像を保存:現在のQRコード画像を保存
選択アイコン:QRコードに埋め込みたいアイコンを選択し、右上にアイコンを表示します.
QRコードの生成:テキストボックスのテキストを使用してQRコードを生成し、表示します.
アイコンを追加:生成されたQRコードにアイコンを追加するかどうか.
コード:
Qrcodeとpyzbarの2つのパケットを用いて2次元コードの生成と復号を行う.
本明細書で説明する例では、zxingパケットが二次元符号復号を行う関数も保持し、「ピクチャを開く」ボタンの関数を変更することで切り替えることができる.
アイコンを追加するかどうかを選択することで、QRコードに画像を埋め込むかどうかを決定します.
PS,
ネット上で与えられた多くのQRコードの復号パケットはzbarであるが、zbarはPython 2にのみ適用され、Python 3環境では試用されない.
また、pyzbarはQRコードとバーコード(一次元コード)のみをサポートし、マトリクスコードなどの二次元コードはしばらくサポートされていません.一方、zxingは複数のQRコードをサポートすることができるが、zxingパケットを用いて解析を行う場合、bytesではなく文字列を直接出力しjavaのzxingパケットに解析を与えるため、zxingは中国語を含むQRコードを解読できない.
pyzbarでもzxingでもRGBA形式の画像を直接解析することはできません.
ボタンの役割:
画像を開く:QRコード画像を開き、QRコード画像を解析します.
画像を保存:現在のQRコード画像を保存
選択アイコン:QRコードに埋め込みたいアイコンを選択し、右上にアイコンを表示します.
QRコードの生成:テキストボックスのテキストを使用してQRコードを生成し、表示します.
アイコンを追加:生成されたQRコードにアイコンを追加するかどうか.
コード:
#!/usr/bin/python # -*- coding: utf-8 -*-
'''
: 。
:
:[email protected]
'''
from tkinter import *
from tkinter import filedialog,scrolledtext,ttk,messagebox
from PIL import Image as PIL_Image
from PIL import ImageTk
import os
import pyzbar.pyzbar as pyzbar
import qrcode
import re
import zxing
img_Show=''
img_Canvas=''
img_icon=''
img_icon_Canvas=''
win_main = Tk()
win_main["background"] = "gray"
win_main.geometry('1000x600')
win_main.resizable(False,False)
win_main.title(" ")
frm_Tools=Frame(win_main)
frm_Tools.place(x=0,y=0,width=200,height=600)
lbl_Tools_Title=Label(frm_Tools,text=' ',borderwidth=2)
lbl_Tools_Title.place(x=0,y=0,width=200,height=30)
def cmd_btn_Tools_Open():
global img_Show,img_Canvas
file_name=filedialog.askopenfilename(filetypes=[('JPG Files','*.jpg'), ('GIF Files', '*.gif'), ('JPEG Files', '*.jpeg')])
if file_name=='':
return
img_Show=PIL_Image.open(file_name)
#
img_Show.save('temp.jpg')
zx = zxing.BarCodeReader()
data = ''
zxdata = zx.decode('temp.jpg')
print(zxdata.raw)
#
os.remove('temp.jpg')
if zxdata:
data = zxdata.raw
else:
data=' :%s' % ('zxdata '+zxdata.raw)
if len(zxdata.points)==0:
data = ' :%s' % (' '+str(zxdata.points))
else:
if zxdata.format=='QR_CODE':
width_temp, height_temp = zxdata.points[3]
elif zxdata.format=='DATA_MATRIX':
width_temp, height_temp = zxdata.points[2]
elif zxdata.format == 'EAN_13':
width_temp, height_temp = zxdata.points[1]
else:
data = ' :%s' % (' '+str(zxdata.format))
width_temp, height_temp=(0,0)
if max(width_temp,height_temp)>=490:
zoom=max(width_temp,height_temp)/490
width_img, height_img = img_Show.size
# print(img_Show.size)
img_Show.thumbnail((int(width_img/zoom),int(height_img/zoom)))
# print(img_Show.size)
img_Canvas = ImageTk.PhotoImage(img_Show)
cnv_Pic.create_image(250,250,image=img_Canvas)
print(file_name)
stxt_Text.delete(0.0,END)
stxt_Text.insert(END,data)
return
def cmd_btn_Tools_Open_Pyzbar():
global img_Show, img_Canvas
file_name = filedialog.askopenfilename(
filetypes=[('JPG Files', '*.jpg'), ('GIF Files', '*.gif'), ('JPEG Files', '*.jpeg')])
if file_name == '':
return
img_Show = PIL_Image.open(file_name)
# img_Show.show()
#
barcodes = pyzbar.decode(img_Show)
print(barcodes)
if len(barcodes)>=1:
data = barcodes[0].data.decode("utf-8")
width_temp = barcodes[0].rect.width
height_temp = barcodes[0].rect.height
if max(width_temp, height_temp) >= 490:
zoom = max(width_temp, height_temp) / 490
width_img, height_img = img_Show.size
img_Show.thumbnail((int(width_img / zoom), int(height_img / zoom)))
img_Canvas = ImageTk.PhotoImage(img_Show)
cnv_Pic.create_image(250, 250, image=img_Canvas)
else:
data = ' :%s' % (' !')
print(data)
stxt_Text.delete(0.0, END)
stxt_Text.insert(END, data)
return
btn_Tools_Open=Button(frm_Tools,text=' ',command=cmd_btn_Tools_Open_Pyzbar)
btn_Tools_Open.place(x=0,y=30,width=100,height=30)
def cmd_btn_Tools_Save():
file_name=filedialog.asksaveasfilename(defaultextension='.jpg',filetypes=[('JPG Files','*.jpg')])
img_Show.save(file_name)
# print(img_save)
return
btn_Tools_Save=Button(frm_Tools,text=' ',command=cmd_btn_Tools_Save)
btn_Tools_Save.place(x=100,y=30,width=100,height=30)
def cmd_btn_Tools_ChooseIcon():
global img_icon,img_icon_Canvas
file_name = filedialog.askopenfilename(
filetypes=[('JPG Files', '*.jpg'), ('GIF Files', '*.gif'), ('JPEG Files', '*.jpeg')])
if file_name == '':
return
img_icon = PIL_Image.open(file_name)
width_img, height_img = img_icon.size
if max(width_img,height_img)>=280:
zoom = max(width_img, height_img) / 280
img_icon.thumbnail((int(width_img / zoom), int(height_img / zoom)))
img_icon_Canvas = ImageTk.PhotoImage(img_icon)
cnv_Pic_Icon.create_image(145, 145, image=img_icon_Canvas)
return
btn_Tools_ChooseIcon=Button(frm_Tools,text=' ',command=cmd_btn_Tools_ChooseIcon)
btn_Tools_ChooseIcon.place(x=0,y=60,width=100,height=30)
def cmd_btn_Tools_Generate():
global img_Show,img_Canvas,img_icon
if var_cbox_AddIcon.get()==0:
str_generate=stxt_Text.get(0.0,END)
img_Show = qrcode.make(str_generate)
img_Show.save(r".\temp.jpg")
img_Canvas = ImageTk.PhotoImage(img_Show)
cnv_Pic.create_image(250, 250, image=img_Canvas)
else:
if img_icon=='':
messagebox.showinfo(' ',' !')
return
code_maker = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
#
str_generate = stxt_Text.get(0.0, END)
code_maker.add_data(str_generate)
code_maker.make(fit=True)
img_Show = code_maker.make_image()
img_Show = img_Show.convert('RGB')
# img_icon = PIL_Image.open(r'D:\\ \\ \\ .jpg')
code_width, code_height = img_Show.size
img_icon = img_icon.resize((60, 60), PIL_Image.ANTIALIAS)
#
img_Show.paste(img_icon, (int((code_width-60) / 2), int((code_height-60) / 2)))
img_Show.save(r".\temp.jpg")
img_Canvas = ImageTk.PhotoImage(img_Show)
cnv_Pic.create_image(250, 250, image=img_Canvas)
return
btn_Tools_Generate=Button(frm_Tools,text=' ',command=cmd_btn_Tools_Generate)
btn_Tools_Generate.place(x=100,y=60,width=100,height=30)
var_cbox_AddIcon=IntVar()
cbox_AddIcon=Checkbutton(frm_Tools,text=" ", variable=var_cbox_AddIcon)
cbox_AddIcon.place(x=0,y=90,width=100,height=30)
cnv_Pic=Canvas(win_main,background='white')
cnv_Pic.place(x=200,y=0,width=500,height=500)
frm_Pic=Frame(win_main)
frm_Pic.place(x=700,y=0,width=300,height=500)
cnv_Pic_Icon=Canvas(frm_Pic,background='white')
cnv_Pic_Icon.place(x=5,y=5,width=290,height=290)
stxt_Text=scrolledtext.ScrolledText(win_main)
stxt_Text.place(x=200,y=500,width=800,height=100)
win_main.mainloop()