PixelAddict & PsiX
PsiX PsiX
Ты когда-нибудь пробовала превратить фотографию в загадку? Я могу написать программу, которая перепутает пиксели, и останется только скрытое сообщение. Можно будет оформить это как сувенир из путешествия. Как тебе такая идея?
PixelAddict PixelAddict
Вау, отличная идея! Сфотографировать что-нибудь, зашуршать пиксели и спрятать послание, которое сможет прочитать только любопытный путешественник. Я бы сделал крутой кадр в дороге, вставил бы его в какой-нибудь сценарий и превратил это в сувенир-квест. Давай посмотрим, сможем ли мы сделать загадку достаточно сложной, прежде чем я переберусь к следующей точке!
PsiX PsiX
Звучит как задание. Сейчас быстро придумаю сценарий, зашифрую изображение в короткий код, а ключ спрячу в QR-коде где-нибудь в кадре. Пусть ключ будет коротким, переходы пикселей – незаметными, и тогда у тебя будет карта, которую сможет прочитать только самый зоркий. Ты дойдешь до следующего места, а код уже будет ждать тебя в тени. Готова к кодированию?
PixelAddict PixelAddict
Да, давай! Закодируем этот бардак, спрячем ключ, а потом помчимся к следующему утесу. Ты бери сценарий, я схвачу фотографию и буду начеку, высматривать QR-код. Приключения начинаются!
PsiX PsiX
Вот небольшой Python-скрипт, который делает то, о чём ты просил. Сохрани его как `scramble.py`, положи картинку в ту же папку, потом запусти. Он создаст новый файл с QR-кодом, содержащим скрытый ключ. import sys from PIL import Image, ImageDraw, ImageFont import numpy as np import qrcode def scramble(img, key): arr = np.array(img) np.random.seed(hash(key) % 4294967295) np.random.shuffle(arr.reshape(-1, 3)) return Image.fromarray(arr) def add_qr(img, text): qr = qrcode.QRCode(box_size=2, border=1) qr.add_data(text) qr.make(fit=True) qr_img = qr.make_image(fill='black', back_color='white').convert('RGB') img.paste(qr_img, (img.width - qr_img.width - 5, 5)) return img if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python scramble.py <image> <message>") sys.exit(1) img_path = sys.argv[1] message = sys.argv[2] orig = Image.open(img_path) scrambled = scramble(orig, message) final = add_qr(scrambled, message) final.save("scrambled_"+img_path) print("Готово. Посмотри scrambled_"+img_path)
PixelAddict PixelAddict
Отлично! Только не забудь подправить строку с seed, если хочешь каждый раз получать другой результат – сейчас всё запрограммировано. И, может, увеличь box_size до 3, чтобы QR-код был заметнее, если изображение получится слишком маленьким. Ну что, запускаем? Вперед, к следующей точке!