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_())

posted @ 2025-08-07 14:21  长毛的土豆儿  阅读(72)  评论(0)    收藏  举报