Version 0.8.

This commit is contained in:
Cédric Bonhomme 2017-05-06 23:20:54 +02:00
parent a770f402cb
commit cbb9df7675
No known key found for this signature in database
GPG key ID: A1CB94DE57B7A70D
6 changed files with 34 additions and 26 deletions

View file

@ -28,12 +28,13 @@ __license__ = "GPLv3"
import sys
from PIL import Image
from typing import Union, IO
from stegano import tools
def hide(input_image_file: str,
message,
encoding='UTF-8',
def hide(input_image: Union[str, IO[bytes]],
message: str,
encoding: str = 'UTF-8',
auto_convert_rgb: bool = False):
"""Hide a message (string) in an image with the
LSB (Least Significant Bit) technique.
@ -41,7 +42,7 @@ def hide(input_image_file: str,
message_length = len(message)
assert message_length != 0, "message length is zero"
img = Image.open(input_image_file)
img = Image.open(input_image)
if img.mode not in ['RGB', 'RGBA']:
if not auto_convert_rgb:
@ -92,10 +93,10 @@ def hide(input_image_file: str,
return encoded
def reveal(input_image_file, encoding='UTF-8'):
def reveal(input_image: Union[str, IO[bytes]], encoding='UTF-8'):
"""Find a message in an image (with the LSB technique).
"""
img = Image.open(input_image_file)
img = Image.open(input_image)
width, height = img.size
buff, count = 0, 0
bitab = []

View file

@ -28,22 +28,23 @@ __license__ = "GPLv3"
import sys
from PIL import Image
from typing import Union, Iterator, IO
from stegano import tools
from . import generators
def hide(input_image_file,
message,
generator,
encoding='UTF-8',
auto_convert_rgb=False):
def hide(input_image: Union[str, IO[bytes]],
message: str,
generator: Iterator[int],
encoding: str = 'UTF-8',
auto_convert_rgb: bool = False):
"""Hide a message (string) in an image with the
LSB (Least Significant Bit) technique.
"""
message_length = len(message)
assert message_length != 0, "message length is zero"
img = Image.open(input_image_file)
img = Image.open(input_image)
if img.mode not in ['RGB', 'RGBA']:
if not auto_convert_rgb:
@ -94,10 +95,12 @@ def hide(input_image_file,
return encoded
def reveal(input_image_file, generator, encoding='UTF-8'):
def reveal(input_image: Union[str, IO[bytes]],
generator: Iterator[int],
encoding: str = 'UTF-8'):
"""Find a message in an image (with the LSB technique).
"""
img = Image.open(input_image_file)
img = Image.open(input_image)
img_list = list(img.getdata())
width, height = img.size
buff, count = 0, 0
@ -114,9 +117,9 @@ def reveal(input_image_file, generator, encoding='UTF-8'):
bitab.append(chr(buff))
buff, count = 0, 0
if bitab[-1] == ":" and limit == None:
try:
if "".join(bitab[:-1]).isdigit():
limit = int("".join(bitab[:-1]))
except:
pass
else:
raise IndexError("Impossible to detect message.")
if len(bitab)-len(str(limit))-1 == limit :
return "".join(bitab)[len(str(limit))+1:]

View file

@ -28,8 +28,9 @@ __license__ = "GPLv3"
import sys
from PIL import Image
from typing import Union, IO
def hide(input_image_file, message):
def hide(input_image: Union[str, IO[bytes]], message: str):
"""
Hide a message (string) in an image.
@ -40,7 +41,7 @@ def hide(input_image_file, message):
message_length = len(message)
assert message_length != 0, "message message_length is zero"
assert message_length < 255, "message is too long"
img = Image.open(input_image_file)
img = Image.open(input_image)
# Use a copy of image to hide the text in
encoded = img.copy()
width, height = img.size
@ -61,7 +62,7 @@ def hide(input_image_file, message):
img.close()
return encoded
def reveal(input_image_file):
def reveal(input_image: Union[str, IO[bytes]]):
"""
Find a message in an image.
@ -69,7 +70,7 @@ def reveal(input_image_file):
hidden message characters (ASCII values).
The red value of the first pixel is used for message_length of string.
"""
img = Image.open(input_image_file)
img = Image.open(input_image)
width, height = img.size
message = ""
index = 0