Veröffentlicht am 2016.04.01 Eine Bibliothek, die Zeichendaten in Bildern mit Python verbirgt. Sie können es auch über die Befehlszeile ausführen. Funktioniert mit Python2-Serien.
install
install
pip install steganography
sample-code
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from steganography.steganography import Steganography
#Text in Bild einbetten
path = "/tmp/image/a.jpg "
output_path = "/tmp/image/b.jpg "
text = 'The quick brown fox jumps over the lazy dog.'
Steganography.encode(path, output_path, text)
#Laden Sie den im Bild ausgeblendeten Text
secret_text = Steganography.decode(output_path)
python
#Text in Bild einbetten
>>>steganography -e /tmp/image/a.jpg /tmp/image/b.jpg 'The quick brown fox jumps over the lazy dog.'
#Laden Sie den im Bild ausgeblendeten Text
>>>steganography -d /tmp/image/b.jpg
The quick brown fox jumps over the lazy dog.
1-1. normalize Scannen Sie alle Pixel im Bild und wählen Sie die Pixel mit einem Rest von 1 aus, wenn jeder RGB-Wert durch 8 geteilt wird. Ändern Sie die Farbe des ausgewählten Pixels so, dass der Rest nicht 1 ist.
■ Pixel, deren Farbe durch Normalisieren der Verarbeitung geändert wurde
Konvertieren Sie Text in hexadezimal. Teilen Sie das Bild in 16 Pixel und ändern Sie den Wert der Pixelfarbe des entsprechenden Teils so, dass der Rest 1 wird, wenn jeder RGB-Wert durch 8 geteilt wird.
Lesen Sie das Bild mit verstecktem Text, teilen Sie das Bild in 16 Pixel und identifizieren Sie die Punktpixel, an denen die Pixelfarbe 1 ist, wenn jeder RGB-Wert durch 8 geteilt wird. Der Hexadezimalwert wird von der Punktpixelposition erfasst, von der Hexadezimalzahl in eine Zeichenfolge konvertiert und ausgegeben.
Sie können das Bild einfach mit einem Kissen bedienen.
open-image
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image
path = "/tmp/image/a.jpg "
img = Image.open(path)
img = img.convert('RGB')
for y in range(img.size[1]):
for x in range(img.size[0]):
r, g, b = img.getpixel((x, y))
print(r, g, b)
output
>>> python sample.py
(44, 81, 110)
(75, 109, 137)
(85, 114, 144)
(69, 99, 127)
(68, 105, 131)
(52, 94, 116)
(65, 103, 124)
(108, 130, 154)
(149, 150, 181)
(164, 148, 184)
(152, 132, 169)
....
red
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image
path = "/tmp/image/a.jpg "
output_path = "/tmp/image/sample_red.png "
img = Image.open(path)
img = img.convert('RGB')
def matched_pixel(r, g, b):
return r % 8 == g % 8 == b % 8 == 1
for y in range(img.size[1]):
for x in range(img.size[0]):
r, g, b = img.getpixel((x, y))
if matched_pixel(r, g, b):
#Schreiben Sie die angegebenen Koordinaten in Rot um
img.putpixel((x, y), (255, 0, 0))
img.save(output_path, "PNG", optimize=True)
3-3. str hex converter
str-hex-converter
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
def to_hex(s):
return s.encode("hex")
def to_str(s):
return s.decode("hex")
base = "aiueo kakikukeko"
print(to_hex(base))
# >>> 616975656f206b616b696b756b656b6f
assert base == to_str(to_hex(base))
Pilow wird zum Lesen und Schreiben von Bildern verwendet. Der Quellcode der Bibliothek ist auf github verfügbar. https://github.com/subc/steganography/blob/master/steganography/steganography.py