from PIL import Image
import os
def text_to_bits(text):
bits = ''
for byte in text.encode('utf-8'): # UTF-8 байты
bits += format(byte, '08b')
bits += '00000000'
return bits
def bits_to_text(bits):
byte_list = []
for i in range(0, len(bits) - 7, 8):
byte = bits[i:i+8]
if byte == '00000000':
break
byte_list.append(int(byte, 2))
return bytes(byte_list).decode('utf-8') # обратно в UTF-8
def hide(image_path, text, output_path):
img = Image.open(image_path).convert('RGB')
pixels = list(img.getdata())
bits = text_to_bits(text)
if len(bits) > len(pixels) * 3:
print("Текст слишком длинный для этой картинки!")
return
new_pixels = []
bit_idx = 0
for pixel in pixels:
new_pixel = list(pixel)
for channel in range(3):
if bit_idx < len(bits):
new_pixel[channel] = (new_pixel[channel] & ~1) | int(bits[bit_idx])
bit_idx += 1
new_pixels.append(tuple(new_pixel))
img.putdata(new_pixels)
img.save(output_path)
print(f"Сообщение спрятано в {output_path}")
def reveal(image_path):
img = Image.open(image_path).convert('RGB')
pixels = list(img.getdata())
bits = ''
for pixel in pixels:
for channel in range(3):
bits += str(pixel[channel] & 1)
print("Скрытое сообщение:", bits_to_text(bits))
hide("anton_chugun.png", "Антон Чугун никого не убивал", "с_секретом.png")