СКРЫТЫЙ СМЫСЛ
Реально то, что осознаешь. (Морфиус. к/ф "Матрица")
Задание
Трудно найти отличия, когда всё кажется таким одинаковым. Перед Вами два файла, два изображения, которые Вы видели и не один раз.

Кажутся одинаковыми, не правда ли?
Иногда в мельчайших отличиях между похожими и почти одинаковыми вещами (событиями, явлениями, поступками, людьми, или, например, изображениями, как в данном случае) заложен некий скрытый смысл.
Теория RGB
Многие изображения, которые мы видим на экранах электронных устройств закодированы с помощью цветовой модели RGB (red, green, blue).

При таком кодировании каждый пиксель изображения описан тремя значениями, каждое из которых отвечает за ту или иную составляющую цвета (red, green или blue) и может быть в интервале от 0 до 255 включительно.

Так, например, значения (255, 255, 255) описывают белый цвет (полное смешение всех основных цветов).
А (0, 0, 0) - отсутствие какого-либо цвета - то есть чёрный цвет.

Найди отличие
Слева: цвет (15, 155, 240), а справа: цвет (14, 156, 241)
Если представить эти цвета в двоичной системе счисления, то получится следующее:

Цвет (00001111, 10011011, 11110000) и цвет (00001110, 10011100, 11110001)

Отличие на единицы. На глаз - совсем незаметно.
Python

Чтобы представить изображения в виде значений, которые описывают каждый пиксель, нужно воспользоваться программой ниже. Для примера, возьмем первые 51 пиксель изображения логотипов школы.

Для этого потребуется скачать и установить на компьютер библиотеку PILLOW (или PIL): в терминале (в командной строке) на вашем компьютере необходимо набрать команду pip install pillow

Важно: решить задачу можно и без использования библиотеки


from PIL import Image

image = Image.open('logо.png')
pix = image.load()

for i in range(51):
    print(pix[0, i])
В результате:
Логотип 1
(255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255) (255, 255, 255)
Логотип 2
(254, 255, 255) (254, 255, 254) (254, 254, 254) (255, 255, 254) (254, 254, 254) (255, 254, 255) (255, 255, 254) (255, 255, 254) (254, 255, 255) (254, 254, 255) (254, 255, 254) (254, 255, 254) (254, 254, 254) (254, 254, 255) (255, 254, 254) (254, 254, 255) (254, 254, 255) (254, 254, 254) (254, 254, 254) (255, 255, 254) (254, 255, 255) (255, 254, 255) (255, 254, 255) (255, 255, 255) (254, 255, 255) (254, 255, 255) (255, 255, 254) (255, 255, 254) (254, 255, 254) (254, 254, 254) (255, 254, 254) (254, 254, 254) (254, 255, 255) (255, 254, 254) (255, 255, 254) (255, 255, 255) (254, 255, 254) (255, 254, 255) (255, 254, 255) (255, 254, 255) (254, 255, 255) (254, 255, 255) (254, 255, 254) (255, 255, 254) (254, 255, 254) (255, 254, 255) (255, 255, 254) (254, 255, 254) (254, 254, 255) (254, 254, 254) (254, 255, 255)

Отличия минимальны, но есть. Могут ли эти отличия хранить скрытое сообщение?

Что делать?
  • 1
    Представить
    Если представить первые 3 пикселя «модифицированного» изображения в двоичной системе счисления:
    (1111 1110, 1111 1111, 1111 1111)
    (1111 1110, 1111 1111, 1111 1110)
    (1111 1110, 1111 1110, 1111 1110)
  • 2
    Выписать
    Выписать те биты (нули или единиц), которые отличаются от оригинального изображения в строчку:
    0110 1000 …
  • 3
    ASCII
    Воспользоваться таблицей ASCII, то последовательности из 8 таких бит соответствует десятичное число или какой-нибудь один символ.

    В данном случае,
    Число 01101000 (в двоичной системе счисления) соответствует числу 104 (в десятичной системе счисления) и соответствует символу h латинского алфавита по таблице ASCII.
РАСшифруйте_ ТАЙНОЕ_ ПОСЛАНИЕ
В первых пикселях второго изображения (логотипа) содержится тайное послание.
Для этого может потребоваться:
Python. Цикл с параметром

for i in range(len(a)):
    print(i)
Python. Вложенный цикл с параметром

for i in range(10):
    for j in range(10)
        print(i, j, sep='_')
Python. Библиотека PIL
Библиотеку PIL сначала необходимо установить на компьютер. Для этого в терминале (в командной строке) на вашем компьютере необходимо набрать команду pip install pillow

Решить задачу можно и без использования библиотеки

from PIL import Image

image = Image.open('logо.png')
pix = image.load()

for i in range(51):
    print(pix[0, i])
    print(pix[0, i][0])
Python. функция bin()

>>> bin(10)
'0b1010'

>>> 0b1010
10
Python. функция int()

>>> int('11111110', 2)
254
Python. Строки. Методы работы со строками.

>>> bin(255)
'0b11111111'
>>> bin(255)[2:]
'11111111'
>>> s = bin(255)[2:]
>>> s[-1]
'1'
Python. Списки. Методы работы со списками.

>>> arr = []
>>> s1 = bin(255)[2:]
>>> s2 = bin(254)[2:]
>>> arr.append(s1[-1])
>>> arr.append(s2[-1])
>>> arr
['1', '0']
Подсказка: послание, состоящее из 4 слов, заканчивается на '!'