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号