Кодирование и декодирование изображений с помощью Python - PullRequest
0 голосов
/ 05 мая 2018

Сначала я получил три целых числа p1, p2, p3.

Затем для каждого pixel я получил r, g, b значение и изменил его на

r * (3 ^ p1) % 256, g * (3 ^ p2) % 256, b * (3 ^ p3) % 256.

Это была моя кодировка, и для ее декодирования для каждого пикселя в кодированном изображении я получил значение r, g, b и изменил его на

r * (3 ^ key1) % 256, g * (3 ^ key2) % 256, b * (3 ^ key3) % 256

, где каждый ключ 64 - соответствующий стр.

Я думаю, это должно работать, поскольку 3 ^ 64 совпадает с 1 в моде 256.

Моя идея неверна или есть проблема с моим алгоритмом?

Это мой алгоритм кодирования:

from PIL import Image

a = Image.open("up.jpg")
rgb_a = a.convert('RGB')
b = Image.new("RGB", a.size)

p1, p2, p3 = map(int, input().split())
x = 3 ** p1
y = 3 ** p2
z = 3 ** p3

for i in range(a.size[0]):
    for j in range(a.size[1]):

        r2, g2, b2 = rgb_a.getpixel((i, j))

        r2 *= (x % 256)
        g2 *= (y % 256)
        b2 *= (z % 256)

        r2 = r2 % 256
        g2 = g2 % 256
        b2 = b2 % 256

        b.putpixel((i, j), (r2, g2, b2))

b.save("changer.jpg")

print("key 1 is", 64-p1)
print("key 2 is", 64-p2)
print("key 3 is", 64-p3)

И это мой алгоритм декодирования: из PIL import Image

a = Image.open("changer.jpg")
rgb_a = a.convert('RGB')
b = Image.new("RGB", a.size)

key1, key2, key3 = map(int, input().split())
x = 3 ** key1
y = 3 ** key2
z = 3 ** key3

for i in range(a.size[0]):
    for j in range(a.size[1]):

        r2, g2, b2 = rgb_a.getpixel((i, j))

        r2 *= (x % 256)
        g2 *= (y % 256)
        b2 *= (z % 256)

        r2 = r2 % 256
        g2 = g2 % 256
        b2 = b2 % 256

        b.putpixel((i, j), (r2, g2, b2))

b.save("comeback.jpg")
...