Загрузка данных


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")