Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функция сокрытия текста в изображенииСодержание книги Поиск на нашем сайте Данная функция принимает на вход следующие значения: input_img_name - имя 24-битного исходного изображения BMP output_img_name - имя 24-битного изображения в кодировке BMP (будет создано или перезаписано) txt_file - имя файла, содержащего текст для кодирования в output_img degree - количество битов из байта (1/2/4/8), которые используются для кодирования текстовых данных в изображении. Функция возвращает истину, если функция завершается успешно, иначе ложь def encode_image(input_img_name, output_img_name, txt_file, degree): if degree not in [1, 2, 4, 8]: # Проверка на соответствие количества #битов из байта, которые используются для кодирования текстовых данных в #изображении. При несоответствии данного параметра с требуемым (1/2/4/8), #функция завершается, возвращая ложь. print("Количесво зашиваемых бит должно быть равно 1 / 2 / 4 / 8") return False text_len = os.stat(txt_file).st_size # Размер текстового файла print(f"Длина зашиваемого сообщения - {text_len}") img_len = os.stat(input_img_name).st_size # Размер контейнера-#изображения if text_len >= img_len * degree / 8 - BMP_HEADER_SIZE: # Сравнение #размера текстового файла и размера контейнера-изображения. Если размер #текстового файла превышает размер контейнера изображения, поделенного #на отношения требуемого количества бит в 1 байте к 8, с вычетом заголовка #контейнера-изображения (54 первых бит), функция завершается, возвращая #ложь. print("Размер текста слишком большой для данной картинки ") return False text = open(txt_file, 'r') # Открытие текстового файла для чтения input_image = open(input_img_name, 'rb') # Открытие контейнера-#изображения для побайтового чтения. output_image = open(output_img_name, 'wb') # Открытие контейнера-#изображения для побайтовой записи. bmp_header = input_image.read(BMP_HEADER_SIZE) # чтение #заголовка оригинального изображения output_image.write(bmp_header) # запись заголовка в новое #изображение text_mask, img_mask = create_masks(degree) # создание битовой маски while True: symbol = text.read(1) # чтение 1 символа текста if not symbol: # при достижении конца файла symbol = ord("\0") # возвращение кодового значение нуль байта for byte_amount in range(0, 8, degree): img_byte = int.from_bytes(input_image.read(1), sys.byteorder) & img_mask # чтение 1 байта контейнера изображения и добавление к нему #маски путем логического умножения (операцией И) bits = symbol & text_mask # получение degree бит из символа bits >>= (8 - degree) # логически сдвигаем биты символа img_byte |= bits # помещаем биты в байт изображения #операцией логического сложения (операция или) output_image.write(img_byte.to_bytes(1, sys.byteorder)) # запись #измененного байта в изображение. symbol <<= degree # логический сдвиг символа на degree для #возможности возврата остальных битов символа break symbol = ord(symbol) # возвращение кодового значение #прочитанного символа for byte_amount in range(0, 8, degree): img_byte = int.from_bytes(input_image.read(1), sys.byteorder) & img_mask # чтение 1 байта контейнера изображения и добавление к нему #маски путем логического умножения (операцией И) bits = symbol & text_mask # получение degree бит из символа bits >>= (8 - degree) # логически сдвигаем биты символа img_byte |= bits # помещаем биты в байт изображения операцией #логического сложения (операция или) output_image.write(img_byte.to_bytes(1, sys.byteorder)) # запись #измененного байта в изображение. symbol <<= degree # логический сдвиг символа на degree для #возможности возврата остальных битов символа output_image.write(input_image.read()) # переписывание оставшихся #бит оригинального изображения в новое изображение text.close() # закрытие текстового файла input_image.close() # закрытие оригинального изображения output_image.close() # закрытие нового изображения return True
|
||
|
Последнее изменение этой страницы: 2021-07-19; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.236 (0.006 с.) |