-
Notifications
You must be signed in to change notification settings - Fork 0
/
Img_in_Img_Encode.py
69 lines (48 loc) · 1.98 KB
/
Img_in_Img_Encode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from PIL import Image
''' from Img_in_Img_Main import * '''
MAX_COLOR_VALUE = 256
MAX_BIT_VALUE = 8
n_bits = 2
encoded_image_path = "C:\Steganography\Encoded.png"
class encimgclass():
def make_image(data, resolution):
image = Image.new("RGB", resolution)
image.putdata(data)
return image
def remove_n_least_significant_bits(value, n):
value = value >> n
return value << n
def get_n_most_significant_bits(value, n):
return value >> MAX_BIT_VALUE - n
def encode(self, e5, e6):
print(e5, e6)
image_to_hide = Image.open(e5, 'r')
image_to_hide_in = Image.open(e6, 'r')
width, height = image_to_hide.size
hide_image = image_to_hide.load()
hide_in_image = image_to_hide_in.load()
data = []
for y in range(height):
for x in range(width):
(r_hide, g_hide, b_hide, alpha) = hide_image[x, y]
# (107, 3, 10)
# most sig bits
r_hide = encimgclass.get_n_most_significant_bits(
r_hide, n_bits)
g_hide = encimgclass.get_n_most_significant_bits(
g_hide, n_bits)
b_hide = encimgclass.get_n_most_significant_bits(
b_hide, n_bits)
# remove lest n sig bits
(r_hide_in, g_hide_in, b_hide_in, alpha) = hide_in_image[x, y]
r_hide_in = encimgclass.remove_n_least_significant_bits(
r_hide_in, n_bits)
g_hide_in = encimgclass.remove_n_least_significant_bits(
g_hide_in, n_bits)
b_hide_in = encimgclass.remove_n_least_significant_bits(
b_hide_in, n_bits)
data.append((r_hide + r_hide_in,
g_hide + g_hide_in,
b_hide + b_hide_in))
encimgclass.make_image(
data, image_to_hide.size).save(encoded_image_path)