def imgToMsgType(self): #the function that maps each image to the kind of message, if applicable path = self.directorySelected + '/' #the target image path woth the directory path that will be appended to each image file for i in self.imgFiles: #for all the image files #for each image, since we don't know the kind of rasterization, we will first try with horizontal, then vertical, otherwise if both return false, we will return false imagePath = path + i #the image path #print(imagePath) hor_res = tuple #to store the result of horizontal rasterization ver_res = tuple #to store the result of horizontal rasterization newstegobj = NewSteganography(imagePath, 'horizontal') hor_res = newstegobj.checkIfMessageExists() if (hor_res[0] == True): #if horizontally rasterized and message exists tup = tuple tup = (i, hor_res) #make the tuple that maps the image name to the type of embedded message self.imgType.append(tup) #append to the list that stores for all the image files information about type of message embedded continue #go on to the next image file else: #either not horizontally rasterized or no message at all, we will now check for vertical rasterization newstegobj = NewSteganography(imagePath, 'vertical') ver_res = newstegobj.checkIfMessageExists() if (ver_res[0] == True): #if vertically rasterized and message exists tup = tuple tup = (i, ver_res) #make the tuple that maps the image name to the type of embedded message self.imgType.append(tup) #append to the list that stores for all the image files information about type of message embedded else: #neither horizontal nor vertical => no message embedded tup = tuple tup = (i, ver_res) #make the tuple that maps the image name to the type of embedded message self.imgType.append(tup) #append to the list that stores for all the image files information about type of message embedded continue #go on to the next image file
def getPictures(self,path): fileList = glob.glob(path+"/*.png") #print (fileList[0]) for file in fileList: #print (file) file_name = file.split("/")[-1] #print (file_name) folder_name = file.split("/")[:-1] #print (folder_name) #folder_name = st = "" for s in folder_name: st += "/" st += s st = st.strip("/") st = "/"+st #print ("llll="+st) file_path = st + "/" +file_name self.first_path = st #print (file_path) medium = NewSteganography(file_path,"horizontal") o = medium.checkIfMessageExists() medium2 = NewSteganography(file_path,"vertical") o2 = medium2.checkIfMessageExists() #print (o) if o[0] == False and o2[0] == False: item = QTreeWidgetItem() item.setText(0,file_name) self.fileTreeWidget.addTopLevelItem(item) item.setForeground(0,QBrush(QColor(0,0,255))) elif o[0] == True: #print (o) item = QTreeWidgetItem() item.setText(0,file_name) self.fileTreeWidget.addTopLevelItem(item) item.setForeground(0,QBrush(QColor(255,0,0))) child = QTreeWidgetItem() child.setText(0,o[1]) child.setForeground(0,QBrush(QColor(0,255,0))) item.addChild(child) else: item = QTreeWidgetItem() item.setText(0,file_name) self.fileTreeWidget.addTopLevelItem(item) item.setForeground(0,QBrush(QColor(255,0,0))) #item.QFont.setBold(True) child = QTreeWidgetItem() child.setText(0,o2[1]) child.setForeground(0,QBrush(QColor(0,255,0))) item.addChild(child)
def getPictures(self, path): fileList = glob.glob(path + "/*.png") #print (fileList[0]) for file in fileList: #print (file) file_name = file.split("/")[-1] #print (file_name) folder_name = file.split("/")[:-1] #print (folder_name) #folder_name = st = "" for s in folder_name: st += "/" st += s st = st.strip("/") st = "/" + st #print ("llll="+st) file_path = st + "/" + file_name self.first_path = st #print (file_path) medium = NewSteganography(file_path, "horizontal") o = medium.checkIfMessageExists() medium2 = NewSteganography(file_path, "vertical") o2 = medium2.checkIfMessageExists() #print (o) if o[0] == False and o2[0] == False: item = QTreeWidgetItem() item.setText(0, file_name) self.fileTreeWidget.addTopLevelItem(item) item.setForeground(0, QBrush(QColor(0, 0, 255))) elif o[0] == True: #print (o) item = QTreeWidgetItem() item.setText(0, file_name) self.fileTreeWidget.addTopLevelItem(item) item.setForeground(0, QBrush(QColor(255, 0, 0))) child = QTreeWidgetItem() child.setText(0, o[1]) child.setForeground(0, QBrush(QColor(0, 255, 0))) item.addChild(child) else: item = QTreeWidgetItem() item.setText(0, file_name) self.fileTreeWidget.addTopLevelItem(item) item.setForeground(0, QBrush(QColor(255, 0, 0))) #item.QFont.setBold(True) child = QTreeWidgetItem() child.setText(0, o2[1]) child.setForeground(0, QBrush(QColor(0, 255, 0))) item.addChild(child)
def __init__(self, parent=None): super(SteganographyBrowser, self).__init__(parent) self.setupUi(self) self.path = QtGui.QFileDialog.getExistingDirectory() if not self.path: exit() # print(self.path) foldername = self.path.split('/')[-1] # print(foldername) self.fileTreeWidget.setHeaderLabel(foldername) filelist = glob.glob(self.path + '/*.png') # print(filelist) # treeWidget = self.fileTreeWidget # treeWidget.setColumnCount(1) items = [] for files in filelist: # the try-except part prevent color image from adding into the widget try: stegan = NewSteganography(files) # print(files) exist, ttype = stegan.checkIfMessageExists() if exist is False: stegan = NewSteganography(files, 'vertical') exist, ttype = stegan.checkIfMessageExists() item = QTreeWidgetItem(self.fileTreeWidget) name = files.split('/')[-1] # name = re.findall(r'/.*/(.*?\.png)', files) # print(name) # print(files) item.setText(0, name) if exist is False: item.setForeground(0, QBrush(QColor(0, 0, 255))) else: item.setForeground(0, QBrush(QColor(255, 0, 0))) foont = QtGui.QFont() foont.setBold(True) item.setFont(0, foont) son = QTreeWidgetItem(item) son.setText(0, ttype) son.setForeground(0, QBrush(QColor(0, 255, 0))) items += [item] except: pass # self.fileTreeWidget.addTopLevelItems(items) self.mode(False) self.fileTreeWidget.itemClicked.connect(self.display)
def __init__(self, parent=None): super(SteganographyBrowser, self).__init__(parent) self.setupUi(self) self.path = QtGui.QFileDialog.getExistingDirectory() if not self.path: exit() foldername = self.path.split('/')[-1] self.fileTreeWidget.setHeaderLabel(foldername) filelist = glob.glob(self.path + '/*.png') items = [] for files in filelist: # the try-except part prevent color image from adding into the widget try: stegan = NewSteganography(files) exist, ttype = stegan.checkIfMessageExists() direction = 'horizontal' if exist is False: direction = 'vertical' stegan = NewSteganography(files, 'vertical') exist, ttype = stegan.checkIfMessageExists() item = QTreeWidgetItem(self.fileTreeWidget) name = files.split('/')[-1] item.setText(0, name) if exist is False: item.setForeground(0, QBrush(QColor(0, 0, 255))) else: item.setForeground(0, QBrush(QColor(255, 0, 0))) foont = QtGui.QFont() foont.setBold(True) item.setFont(0, foont) son = QTreeWidgetItem(item) son.setText(0, ttype) son.setText(1, direction) son.setForeground(0, QBrush(QColor(0, 255, 0))) items += [item] except: pass self.fileTreeWidget.addTopLevelItems(items) self.mode(False) self.fileTreeWidget.itemClicked.connect(self.display) self.btnExtract.clicked.connect(self.extract) self.btnWipeMedium.clicked.connect(self.wipe)
def additem(self, path, item): self.fileTreeWidget.addTopLevelItem(item) horizontalread = NewSteganography(path, 'horizontal') verticalread = NewSteganography(path, 'vertical') ah,bh = horizontalread.checkIfMessageExists() av,bv = verticalread.checkIfMessageExists() if ah == True: item.setForeground(0,QtGui.QBrush(QtGui.QColor("#FF0000"))) item.addChild(QTreeWidgetItem([bh])) self.childdict[item] = [bh, 'horizontal'] elif av == True: item.setForeground(0,QtGui.QBrush(QtGui.QColor("#FF0000"))) item.addChild(QTreeWidgetItem([bv])) self.childdict[item] = [bv, 'vertical'] else: item.setForeground(0,QtGui.QBrush(QtGui.QColor("#0000FF")))
def extract(self): self.btnExtract.setEnabled(False) self.txtMessage.setPlainText("") self.scn.clear() self.viewMessage.update() if self.selectedfile in self.v: ### Instantiate a class based on the method class1 = NewSteganography(self.path+"/"+self.selectedfile,"vertical") ### in which the message has been embedded in else: ### the medium class1 = NewSteganography(self.path+"/"+self.selectedfile,"horizontal") tup = class1.checkIfMessageExists() ### if the message exists then display the message = class1.extractMessageFromMedium() ### message on the stack widget using the self.viewMessage.setEnabled(True) ### appropriate widget self.lblImageMessage.setEnabled(True) if tup[1] == "Text": self.stackMessage.setCurrentIndex(1) ### Also update the message label below the self.lblImageMessage.setText("Text") ### stacked widget message.saveToTarget("save.txt") filein = open("save.txt") data = filein.read() self.txtMessage.setPlainText(data) elif tup[1] == 'ColorImage' or tup[1] == 'GrayImage': self.stackMessage.setCurrentIndex(0) self.lblImageMessage.setText("Image") message.saveToTarget("save.png") self.viewMessage.setScene(self.scn) pixmap = QtGui.QPixmap("save.png") PixItem = self.scn.addPixmap(pixmap) self.viewMessage.fitInView(PixItem) self.viewMessage.show()
def setupFileTree(self): #Keep a dictionary to track which files had messages in them hidden_message_types = dict() file_paths = glob(self.directory + "/*.png") files = [os.path.basename(path) for path in file_paths] if(files == []): return #Go through each of the files and check if they have a message in them for file in files : try: steg = NewSteganography(self.directory + "/" + file) except TypeError: continue #Add each element into the treeview appropriately child = QTreeWidgetItem() child.setText(0,file) exists, type = steg.checkIfMessageExists() hidden_message_types[file] = type #If it has a message inside, color and extend appropriately if(exists) : child.setForeground(0,QtGui.QBrush(Qt.red)) second_child = QTreeWidgetItem() second_child.setText(0,type) second_child.setForeground(0,QtGui.QBrush(Qt.green)) child.addChild(second_child) else: child.setForeground(0,QtGui.QBrush(Qt.blue)) self.fileTreeWidget.addTopLevelItem(child) #Expand all the list items and update the dictionary self.fileTreeWidget.expandAll() self.hidden_message_dict = hidden_message_types
def displayMedium(self): self.grpMedium.setEnabled(True) #self.grpMessage.setEnabled(False) self.btnWipeMedium.setEnabled(False) self.btnExtract.setEnabled(False) print ("displayMdium") it = self.fileTreeWidget.currentItem() self.item = it #self.it = it file_name = it.text(0) self.file_path = self.first_path+"/"+file_name print (file_name) scene = QGraphicsScene() self.viewMedium.setScene(scene) pix_map = QPixmap(self.file_path) pix_it = QGraphicsPixmapItem(pix_map) scene.addItem(pix_it) #scene.setSceneRect(0,0,250,250) self.viewMedium.fitInView(scene.sceneRect(),Qt.KeepAspectRatio) self.viewMedium.show() self.txtMessage.setPlainText("") sc = QGraphicsScene() self.viewMessage.setScene(sc) medium = NewSteganography(self.file_path,"horizontal") #self.medium = medium medium2 = NewSteganography(self.file_path,"vertical") #self.medium2 = medium2 o = medium.checkIfMessageExists() o2 = medium2.checkIfMessageExists() print ("o"+str(o[0])) print ("o2[0]"+str(o2[0])) if o[0] == True or o2[0] == True: self.btnWipeMedium.setEnabled(True) self.btnExtract.setEnabled(True) self.grpMessage.setEnabled(True) if o[1] == "GrayImage" or o[1] == "ColorImage": print ("case1start") self.stackMessage.setCurrentWidget(self.pgImage) message = medium.extractMessageFromMedium() target = "extract.png" self.target = target self.type = "Image" message.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractImage(target)) self.medium = medium #self.btnWipeMedium.clicked.connect(self.boxQuestion) print ("case1end") #self.btnWipeMedium.clicked.connect(lambda: self.wipe(self.file_path)) elif o2[1] == "GrayImage" or o2[1] == "ColorImage": print ("case2start") #self.grpMessage.setEnabled(True) self.stackMessage.setCurrentWidget(self.pgImage) message2 = medium2.extractMessageFromMedium() target = "extract.png" self.target = target self.type = "Image" message2.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractImage(target)) self.medium = medium2 #self.btnWipeMedium.clicked.connect(self.boxQuestion) print ("case2end") #self.btnWipeMedium.clicked.connect(lambda: self.wipe(self.file_path)) elif o[1] == "Text": print ("case3start") self.stackMessage.setCurrentWidget(self.pgText) message = medium.extractMessageFromMedium() target = "extract.txt" self.target = target self.type = "Text" message.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractText(target)) self.medium = medium #self.btnWipeMedium.clicked.connect(self.boxQuestion) print ("case3end") else: print ("case4tart") self.stackMessage.setCurrentWidget(self.pgText) message2 = medium2.extractMessageFromMedium() target = "extract.txt" self.target = target self.type = "Text" message2.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractText(target)) self.medium = medium2 #self.btnWipeMedium.clicked.connect(self.boxQuestion) print ("case4end") else: print ("caseNonestart") self.btnWipeMedium.setEnabled(False) self.btnExtract.setEnabled(False) self.grpMessage.setEnabled(False) print ("caseNoneend")
def __init__(self,parent = None): super(SteganographyGUI,self).__init__(parent) self.setupUi(self) filepath = QFileDialog.getExistingDirectory(self,"open folder only",Options = QFileDialog.ShowDirsOnly) if not filepath: sys.exit(1) self.selectedfile = "" self.path = filepath newfilepath = str(filepath).split("/") filesd = newfilepath[-1] self.fileTreeWidget.setHeaderLabel(newfilepath[-1]) ### Labelling the treewidget with self.scn = QGraphicsScene() ### the file path self.btnExtract.clicked.connect(self.extract) self.btnExtract.setEnabled(False) self.btnWipeMedium.setEnabled(False) self.viewMedium.setEnabled(False) self.viewMessage.setEnabled(False) self.lblImageMessage.setEnabled(False) blue = [] vertical = [] horizontal = [] files = glob.glob(str(filepath)+"/*.png") for f in files: ### Sorting the files as per image f = f.split("/")[-1] ### content and the method in which y = re.findall('(v|h)',f) ### the message is saved if not y: ### E.g horizontal or vertical blue.append(f) elif y[0] == 'v': im = Image.open(str(filepath)+"/"+f) if im.mode == 'L': vertical.append(f) else: blue.append(f) elif y[0] == 'h': im = Image.open(str(filepath)+"/"+f) if im.mode == 'L': horizontal.append(f) else: blue.append(f) self.b = blue self.v = copy.deepcopy(vertical) self.h = copy.deepcopy(horizontal) self.dict = {} ### Creating a dictionary that holds ### all the message images and the type self.blueitems = [] ### messages they contain if any for f in range(len(blue)): item = QTreeWidgetItem() item.setText(0,"{0}".format(blue[f])) ### Create item widgets for files with item.setForeground(0,QtGui.QBrush(Qt.blue)) ### no content in them self.blueitems.append(item) self.dict[blue[f]] = "0" x = f + 1 self.verticalitems = [] for f in range(len(vertical)): ### Create a list of item widgets from item = QTreeWidgetItem(["{0}".format(vertical[f])]) ### message mediums that have vertical class1 = NewSteganography(str(filepath+"/" + vertical[f]),'vertical') ### messages embedded in them. tup = class1.checkIfMessageExists() if tup[0]: item.addChild(QTreeWidgetItem([tup[1]])) self.dict[vertical[f]] = tup[1] item.setForeground(0,QtGui.QBrush(Qt.red)) self.verticalitems.append(item) else: self.dict[vertical[f]] = tup[1] item.setForeground(0,QtGui.QBrush(Qt.blue)) self.blueitems.append(item) self.v.remove(vertical[f]) for f in range(len(self.verticalitems)): self.fileTreeWidget.addTopLevelItem(self.verticalitems[f]) x += f + 1 self.horizontalitems = [] for f in range(len(horizontal)): ### Create a list of item widgets from item = QTreeWidgetItem(["{0}".format(horizontal[f])]) ### message mediums that have horizontal class1 = NewSteganography(str(filepath+"/" + horizontal[f]),'horizontal') ### messages embedded in them. tup = class1.checkIfMessageExists() if tup[0]: item.addChild(QTreeWidgetItem([tup[1]])) self.dict[horizontal[f]] = tup[1] item.setForeground(0,QtGui.QBrush(Qt.red)) self.horizontalitems.append(item) else: self.dict[horizontal[f]] = tup[1] item.setForeground(0,QtGui.QBrush(Qt.blue)) self.blueitems.append(item) self.h.remove(horizontal[f]) for f in range(len(self.horizontalitems)): self.fileTreeWidget.addTopLevelItem(self.horizontalitems[f]) for f in range(len(self.blueitems)): self.fileTreeWidget.insertTopLevelItem(f,self.blueitems[f]) self.fileTreeWidget.itemSelectionChanged.connect(self.blueClick) self.btnExtract.clicked.connect(self.extract) self.btnWipeMedium.clicked.connect(self.wipe)
def displayMedium(self): self.grpMedium.setEnabled(True) #self.grpMessage.setEnabled(False) self.btnWipeMedium.setEnabled(False) self.btnExtract.setEnabled(False) print("displayMdium") it = self.fileTreeWidget.currentItem() self.item = it #self.it = it file_name = it.text(0) self.file_path = self.first_path + "/" + file_name print(file_name) scene = QGraphicsScene() self.viewMedium.setScene(scene) pix_map = QPixmap(self.file_path) pix_it = QGraphicsPixmapItem(pix_map) scene.addItem(pix_it) #scene.setSceneRect(0,0,250,250) self.viewMedium.fitInView(scene.sceneRect(), Qt.KeepAspectRatio) self.viewMedium.show() self.txtMessage.setPlainText("") sc = QGraphicsScene() self.viewMessage.setScene(sc) medium = NewSteganography(self.file_path, "horizontal") #self.medium = medium medium2 = NewSteganography(self.file_path, "vertical") #self.medium2 = medium2 o = medium.checkIfMessageExists() o2 = medium2.checkIfMessageExists() print("o" + str(o[0])) print("o2[0]" + str(o2[0])) if o[0] == True or o2[0] == True: self.btnWipeMedium.setEnabled(True) self.btnExtract.setEnabled(True) self.grpMessage.setEnabled(True) if o[1] == "GrayImage" or o[1] == "ColorImage": print("case1start") self.stackMessage.setCurrentWidget(self.pgImage) message = medium.extractMessageFromMedium() target = "extract.png" self.target = target self.type = "Image" message.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractImage(target)) self.medium = medium #self.btnWipeMedium.clicked.connect(self.boxQuestion) print("case1end") #self.btnWipeMedium.clicked.connect(lambda: self.wipe(self.file_path)) elif o2[1] == "GrayImage" or o2[1] == "ColorImage": print("case2start") #self.grpMessage.setEnabled(True) self.stackMessage.setCurrentWidget(self.pgImage) message2 = medium2.extractMessageFromMedium() target = "extract.png" self.target = target self.type = "Image" message2.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractImage(target)) self.medium = medium2 #self.btnWipeMedium.clicked.connect(self.boxQuestion) print("case2end") #self.btnWipeMedium.clicked.connect(lambda: self.wipe(self.file_path)) elif o[1] == "Text": print("case3start") self.stackMessage.setCurrentWidget(self.pgText) message = medium.extractMessageFromMedium() target = "extract.txt" self.target = target self.type = "Text" message.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractText(target)) self.medium = medium #self.btnWipeMedium.clicked.connect(self.boxQuestion) print("case3end") else: print("case4tart") self.stackMessage.setCurrentWidget(self.pgText) message2 = medium2.extractMessageFromMedium() target = "extract.txt" self.target = target self.type = "Text" message2.saveToTarget(target) #self.btnExtract.clicked.connect(lambda: self.extractText(target)) self.medium = medium2 #self.btnWipeMedium.clicked.connect(self.boxQuestion) print("case4end") else: print("caseNonestart") self.btnWipeMedium.setEnabled(False) self.btnExtract.setEnabled(False) self.grpMessage.setEnabled(False) print("caseNoneend")