Организация входных и выходных данных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Организация входных и выходных данных



Входными данными разрабатываемого приложения будут текстовый файл и контейнер-изображение. Текстовые входные данные подвергаются сокрытию в контейнере-изображении. Контейнер-изображение подается на вход функции извлечения текста.

Выходными данными при сокрытии будет создаваемый приложением контейнер-изображение формата BMP с сокрытым текстом.

Выходными данными при извлечении будет текстовый создаваемой корневой папке приложения и текст данного файла, выведенный пользователю в окне приложения.

 

Выбор состава технических и программных средств

Для написания разрабатываемого приложения был выбран язык программирования Python.

Средой для разработки была выбрана среда для разработки ПО на языке Python - PyCharm Community Edition 2021.1.1.

Для написания кода алгоритма были подключены следующие библиотеки:

1. Tkinter. Данный пакет включает в себя основные модули для работы с графическими интерфейсами на языке Python. Из Tkinter импортируются следующие компоненты:

1.1. Frame - вспомогательный виджет, создание которого происходит при помощи класса Frame().

1.2. Tk - содержит компоненты графического пользовательского интерфейса.

1.3. Filedialog – диалоговые окна для открытия и выбора файлов для сохранения или записи.

1.4. Messagebox – стандартные диалоговые окна сообщений.

2. Модуль os предоставляет способы использования функциональных возможностей, зависящих от операционной системы.

3. Модуль sys обеспечивает доступ к некоторым переменным, используемым или поддерживаемым интерпретатором и к функциям, которые тесно связаны с интерпретатором.


 

РАЗРАБОТКА ПРИЛОЖЕНИЯ СОКРЫТИЯ ТЕКСТОВОЙ ИНФОРМАЦИИ В ИЗОБРАЖЕНИИ

Конструкция оконного приложения

canvas.pack()
txt.pack()
Menu
Stego

При запуске приложение появляется рабочее окно (см рисунки 3-5).

Рисунок 3 – Оконное приложение.

fileMenu
fileMenu.commands


Рисунок 4 – Команды: меню->Файл.

Work
Work.commands


Рисунок 5 – Команды: меню->Функционал.

 

Таблица 3

Назначение компонентов оконного приложения

№ п/п Функции Назначение
1 Stego Главная панель приложения
2 Menu Полоса элементов меню
3 txt.pack() Текстовая панель
4 canvas.pack() Панель для графических изображени
5 fileMenu Компонент меню, содержащий команды “Открыть текстовый файл” и “Открыть изображение”
6 Work Компонент меню, содержащий команды “Сокрыть” и “Извлечь”

Структура приложения.

Варианты использования приложения приведены в use case диаграмме, приведенной ниже (см. рисунок 1).

Приложение состоит из двух файлов: form.py и stego_bmp.py.

Файл form.py

Файл form.py содержит в себе функции реализации создания и отображения интерфейса, а также функции вызова основных функций алгоритма.

При работе приложения вызываются следующие функции:

Таблица 3

Используемые функции главного файла приложения

№ п/п Функции Назначение
1 __init__ Инициализация основных функций
2 show_menu Отображение элементов меню
3 initUI Создание заголовка и текстового блока
4 Open_file Открытие текстового файла для прочтения
5 show_img Открытие изображения для просмотра
6 ENCRIPT Выбор текстового файла, выбор файла контейнера, выбор итогового файла контейнера, подача указанных файлов на вход функции сокрытия.    
7 DECRIPT Выбор файла контейнера и подача данного файла на функцию извлечения текста.

 

Ниже предоставлен код функций класса Form:

def __init__(self):

super().__init__() # Конструктор виджет фрейма с родительским #MASTER.

self.initUI() # Инициализация функции создания текстового блока

self.show_menu() # Инициализация функции создания меню

def initUI(self):

self.master.title("Stego") # заголовок формы

self.pack(fill=BOTH, expand=1) # Упакуйте виджет в родительский #виджет.

self.txt = Text(self) # Атрибут экземпляра txt формы

self.txt.pack(fill=BOTH, expand=1)

def show_menu(self):

menu_bar = Menu(self.master) # Создайте виджет меню с родительским #MASTER.

self.master.config(menu=menu_bar)

fileMenu = Menu(menu_bar, tearoff=0) # Создание менюбаров

Work = Menu(menu_bar, tearoff=0)

Help = Menu(menu_bar, tearoff=0)

menu_bar.add_cascade(label="Файл", menu=fileMenu) #Добавление элемента иерархического меню “Файл”.

fileMenu.add_command(label="Открыть текстовый файл", command=self.Open_file)

# Добавление команды открытия текстового файла принадлежащему #элементу меню “Файл”

fileMenu.add_command(label="Открыть изображение", command=self.new_window) # Добавление команды открытия файла изображения принадлежащему элементу меню “Файл”

menu_bar.add_command(label="Help", command=self.Open_file) #Добавление команды Help

menu_bar.add_cascade(label="Функционал", menu=Work) #Добавление элемента иерархического меню “Функционал”.

Work.add_command(label="Сокрыть", command=self.ENCRIPT) #Добавление команды сокрытия принадлежащему элементу меню #“Функционал”

Work.add_command(label="Извлеч", command=self.DECRIPT) #Добавление команды изображения принадлежащему элементу меню #“Функционал”

def Open_file(self):

ftypes = [('Текстовые файлы', '*.txt'), ('Все файлы', '*')] # кортеж отображаемых файлов

dlg = filedialog.Open(self, filetypes=ftypes) #диалоговое окно выбора текстового файла

fl = dlg.show() #запись имени выбранного файла

if fl!= '':

   text = self.readFile(fl) # чтение файла

     self.txt.delete("1.0", "end") # очистка текстового блока

   self.txt.insert(END, text) # запись файла в текстовый блок

def ENCRIPT(self):

messagebox.askokcancel() # отображение сообщения о необходимости #выбора текстового файла для сокрытия

ftypes = [('Текстовые файлы', '*.txt'), ('Все файлы', '*')] # кортеж #отображаемых файлов

dlg = filedialog.Open(self, filetypes=ftypes) # диалоговое окно выбора #текстового файла

fltxt = dlg.show() # запись имени выбранного файла

messagebox.askokcancel() # отображение сообщения о необходимости #выбора контейнера изображения для сокрытия

ftypes = [('Графический контейнер', '*.bmp'), ('Все файлы', '*')] #кортеж #отображаемых файлов

dlg = filedialog.Open(self, filetypes=ftypes) # диалоговое окно выбора #файла контейнера

flbmp = dlg.show() #запись имени выбранного файла

messagebox.askokcancel() #отображение сообщения о необходимости #выбора контейнера изображения для сохранения нового контейнера

flnewbmp = filedialog.asksaveasfilename() # запись имени файла нового #контейнера, полученного из диалогового окна сохранения файла

encode_image(flbmp,flnewbmp,fltxt,1) # подача данных на вход #функции сокрытия (класс Stego)

def DECRIPT(self):

ftypes = [('Графический контейнер', '*.bmp'), ('Все файлы', '*')]

#кортеж отображаемых файлов

dlg = filedialog.Open(self, filetypes=ftypes) # диалоговое окно выбора #файла контейнера с сокрыты текстом

flbmp = dlg.show() # запись имени выбранного файла

decode_image(flbmp, "t.txt", 1) # подача данных на вход функции #извлечения (класс Stego)

fl = "t.txt" # имя файла, созданного в ходе выполнения функции #извлечения

text = self.readFile(fl) # прочтение созданного файла

self.txt.delete("1.0", "end") # очистка текстового блока

self.txt.insert(END, text) # заполнение текстового блока содержимым созданного файла

2.2.2 Файл stego_bmp.py.

Файл stego_bmp.py содержит в себе класс, хранящий в себе функции сокрытия текстовой информации в изображении, извлечения текстовой информации из изображения, а также функцию создания битовых масок.

Таблица 4

Функции файла stego _ bmp. py

№ п/п Функции Назначение
1 encode_image Функция сокрытия текста в изображении
2 decode_image Функция извлечения текста из изображения
3 create_masks Функция создания маски

 

Ниже предоставлен код функций файла stego_bmp.py



Поделиться:


Последнее изменение этой страницы: 2021-07-19; просмотров: 113; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.6.75 (0.01 с.)