515
17.4
Die Python Imaging Library (PIL)
Der nächste Abschnitt beschreibt ein Anwendungsbeispiel für die Verwendung von PIL.
17.4.3 Steganografie – Informationen in Bildern verstecken
Um ein digitales Bild vor illegalem Kopieren und Verwenden zu schützen, verstecken man-
che Grafiker ihren Namen oder ihre Initialen in dem Bild. So können sie später immer
beweisen, dass das Bild von ihnen ist. Das Verstecken von geheimer Information nennt man
Steganografie. Eine sehr einfache Technik ist folgende: Man öffnet die Bilddatei mit einem
Bildbearbeitungsprogramm und stellt die maximale Vergrößerung ein. Man kann nun die
einzelnen Pixel des Bildes gut erkennen und einzeln bearbeiten. Mit der Pipette wählt man
die Farbe des ersten Pixels links oben in der Ecke. Bei einer PPM-Datei mit 256 verschiede-
nen Stufen für jede Farbkomponente gibt es etwa 16,8 Millionen verschiedene Farben.
Wahrscheinlich wird es also nur sehr wenige Pixel in dem Bild geben, die genau diese Farbe
haben. In der gewählten Farbe kann man dann irgendwo auf dem Bild punktweise einige
Buchstaben verstecken. Mit einem kleinen Python-Programm kann man den versteckten
Text wieder sichtbar machen. Abbildung 17.11 zeigt zwei Screenshots. Links sehen Sie ein
Foto der Skulptur von Alan Turing, einem der Wegbereiter der Informatik, in Manchester.
Klickt man auf die Schaltfläche, extrahiert das Programm den versteckten Namen.
Abb. 17.11: Applikation, die einen versteckten Text finden kann.
mode
Eine Zeichenkette, die den Modus des Bildes definiert. Beispiele:
"1": Schwarz-Weiß-Bild; jedes Pixel hat den Wert 0 (Schwarz)
oder
1 (Weiß); "L": Graustufenbild; jedes Pixel wird durch eine
Zahl zwischen
0 und 255 dargestellt; "RGB": Farbbild; jedes Pixel
wird durch ein Tripel aus Zahlen zwischen
0 und 255 (Farbanteil
für Rot, Grün und Blau) dargestellt.
putpixel((x, y),
value)
Setzt das Pixel an der Stelle (x, y) auf den neuen Farbwert
value. Der Typ von value hängt vom Modus (mode) des Image-
Objektes ab.
resize(size=width,
height))
Liefert ein neues Image-Objekt mit einer (vergrößerten oder ver-
kleinerten) Kopie mit Breite
width und Höhe height.
size
Größe des Bildes als Tupel der Form (breite, höhe)
Attribut/Methode Erklärung
Tabelle 17.6: Einige Methoden der PIL.Image-Objekte (Forts.)
Kapitel 17
Grafik
516
Skript:
Erläuterung:
#1: In der __init__()-Prozedur wird zunächst aus einer Bilddatei ein PIL.Image-Objekt
erzeugt und daraus dann ein
tkinter.PhotoImage-kompatibles Objekt gewonnen.
from tkinter import *
from PIL import Image, TkImage
class App:
def __init__(self):
self.filename="manchester_2.png"
self.window = Tk()
self.img = Image.open(self.filename)
self.pic = ImageTk.PhotoImage(self.img)
self.c = Canvas(self.window,
width=self.pic.width(),
height=self.pic.height())
self.c.pack()
self.c.create_image(0, 0, anchor=NW,
image=self.pic) #2
self.ExtractButton=Button(
master=self.window,
text="Wörter finden",
command=self.extract)
self.ExtractButton.pack()
self.window.mainloop()
def extract(self):
w, h = self.img.size
color = self.img.getpixel((0, 0)) #3
pixels = [(x, y) for x in range(w)
for y in range(h)] #4
for x, y in pixels:
if self.img.getpixel((x, y)) != color: #5
self.img.putpixel( (x, y), (255, 255, 255))
else: #6
self.img.putpixel (x, y), (0, 0, 0))
self.pic = ImageTk.PhotoImage(self.img) #7
self.c.create_image(0, 0, anchor=NW, image=self.pic)
App()

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.