Python寫的用來識別圖片條形碼,并按照條形碼內容進行命名的代碼
import sys
from datetime import datetime
from PyQt5.QtWidgets import QApplication,QGridLayout,QWidget,QPushButton,
QListWidget,QFileDialog,QHBoxLayout,QMessageBox
from pyzbar.pyzbar import decode
from PIL import Image
from PyQt5.QtCore import QThread
class Main(QWidget):
file_names=[]
def init(self):
super().init()
self.setFixedSize(600,700)
self.move(200,200)
self.setWindowTitle('圖片條碼識別程序')
grid=QGridLayout()
hbox=QHBoxLayout()
self.ls_files=QListWidget(self)
grid.addWidget(self.ls_files,0,0,1,2)
# self.ls_log=QListWidget(self)
# grid.addWidget(self.ls_log,1,0,1,2)
btn_load=QPushButton('加載文件',self)
btn_load.setFixedHeight(40)
btn_load.clicked.connect(self.load_files)
btn_turn=QPushButton('轉化文件',self)
btn_turn.setFixedHeight(40)
btn_turn.clicked.connect(self.turn_files)
# btn_savelog=QPushButton('導出日志',self)
# btn_savelog.setFixedHeight(40)
# btn_savelog.clicked.connect(self.save_log)
hbox.addWidget(btn_load)
hbox.addWidget(btn_turn)
# hbox.addWidget(btn_savelog)
grid.addLayout(hbox,2,0,1,2)
self.setLayout(grid)
def load_files(self):
file_dialog=QFileDialog(self)
file_names,_=file_dialog.getOpenFileNames(self,'選擇文件','', "All Files (*);;Pic Files (*.jpg)")
for file in file_names:
self.ls_files.addItem(file)
def turn_files(self):
pass
# def save_log(self):
# count=self.ls_log.count()
# logname= datetime.now().strftime("%Y%m%d_%H%M%S")
# with open(self.save_path+'/'+logname+'.txt','a') as f:
# for index in range(count):
# f.write(self.ls_log.item(index).text()+'\n')
def decode_barcode(self,image_path,save_path):
try:
# 打開圖片
image = Image.open(image_path)
# 使用pyzbar的decode函數解碼圖片中的條形碼
decoded_objects = decode(image)
num=''
count=self.ls_log.count()
# logname= datetime.now().strftime("%Y%m%d_%H%M%S")
logname='log'
with open(self.save_path+'/'+logname+'.txt','a') as f:
#輸出解碼結果
for obj in decoded_objects:
# print('Type:', obj.type)
# print('Data:', obj.data.decode('utf-8')) # 解碼數據為UTF-8格式的字符串
# print('Position:', obj.rect) # 打印條形碼的位置
# print('Polygon:', obj.polygon) # 打印條形碼的多邊形頂點位置
num=str(obj.data.decode('utf-8'))
if num:
image.save(save_path+'/'+num+".jpg",format=None)
# self.ls_log.addItem(f'圖片 {image_path} 已經轉換完成!')
ipath=save_path+'/'+num+".jpg"
f.write(f'{image_path}---{ipath}\n')
except:
pass
class Run_Thread(QThread):
def init(self, parent = ...):
super().init(self)
def run(self):
try:
self.save_path=QFileDialog.getExistingDirectory(None,'保存文件')
for index in range(self.ls_files.count()):
file=self.ls_files.item(index).text()
self.decode_barcode(file,self.save_path)
QMessageBox.information(self,'提示消息','圖片轉換完成!')
except Warning:
print(index)
if name=="main":
app=QApplication(sys.argv)
window=Main()
window.show()
sys.exit(app.exec_())

浙公網安備 33010602011771號