Bildschutz oder Bildverfolgung?
Da ich selbst ja auch einige Bilder mache
Keine Werbung, aber kannst ja mal schauen:
Und öfter mit Kollegen über den Schutz von Bildern phylosophiert habe, hab ich ein Verfahren entwickelt, was dir nach dem Betrachten ganz genau zeigt, wie das Bild manipuliert worden ist.
Für Digimark würde ich kein Geld ausgeben. Hatte das Bild auf 99% skaliert und mit 95% als JPEG irgendwann mal gespeichert.
Selbst, wenn es gleich groß bleibt und man es statt 100% auf 92% oder so speichert, ist die Wahrscheinlichkeit sehr groß, dass es nicht mehr gelesen wird.
Was du machen kannst ist:
Vom Server, wo es runtergeladen wird, schreibst du in das Thumbnail-Bild eines JPEGs neue Informationen. Je nach dem welcher Nutzer deine Datei runterlädt. Die Thumbnailinformationen werden nicht mit allen Bildbetrachtern angezeigt, aber viele Programme entfernen sie auch nicht unbedingt.
Mit Irfanview kann man sie allerdings abtrennen.
Wenn du der Urheber eines Bildes bist und das Bild wieder findest, kannst du ja denjenigen verklagen egal ob du einen Schriftzug auf deinem Bild hast oder nicht, wenn er es nicht veröffentlichen darf.
Ansonsten nur kleine Bilder ins Netz stellen.
Die nicht für Poster reichen.
Aber als Avatar wird man sie immer nehmen können.
Zu meinem Manipulationserkennungsverfahren.
War auch nur ein Test. Musste ich verwerfen, weil es auch nicht bei JPEG-Kompression funktioniert hatte.
Im Anhang zwei Codes:
Code: Alles auswählen
; Folker Linstedt, 26.07.2006, Farbfilter
#Image=1
#Datei=2
UseJPEGImageDecoder()
OpenConsole()
PrintN("FL-Studios (c) Folker Linstedt 2006, Stand 27.07.2006 Registriert fuer Anonym")
PrintN("Programm zum Bildschutz: Erstellt BMP-Datei unkomprimiert 24 Bit")
PrintN("")
Print(" Bitte Farbveraenderungs-Wert eingeben (Bitte nur Zahlen): ");
SZ.s=Input()
Z.l=Val(SZ)
CloseConsole()
;If ReadFile(#Datei,"FLconfig.txt")<>0
; SZ.s=ReadString(#Datei,#PB_Ascii)
; Z=Val(SZ)
; Debug Z
; CloseFile(#Datei)
;Else
; Z=0
;EndIf
Anzahl=CountProgramParameters()
For Index = 0 To Anzahl-1
LoadImage(#Image,ProgramParameter(Index))
StartDrawing(ImageOutput(#Image))
For y=0 To ImageHeight(#Image)-1
For x=0 To (ImageWidth(#Image)-1)/2
p=Point(x*2,y)
R=Red(p)
G=Green(p)
B=Blue(p)
grau=(R+G+B)/3-0
p2=Point(x*2+1,y)
R=Red(p2)
G=Green(p2)
B=Blue(p2)
If (R<(255-Z) And R>Z) And (G<(255-Z) And G>Z) And (B<(255-Z) And B>Z)
R+Z
B-Z
EndIf
p2=RGB(R,G,B)
Plot(x*2,y,RGB(grau,grau,grau))
Plot(x*2+1,y,p2)
Next
Next
StopDrawing()
SaveImage(#Image,ProgramParameter(Index)+".FL")
Next
Original
Mit Streifen:
Wenn es nicht verändert worden ist:
Wenn es zum Beispiel an den Armen manipuliert wurde
Das Programm macht graue Streifen in eine Bilddatei.
Mit etwas Fantasie sieht man die fast nicht
Wenn jemand das Bild verändert, zum Beispiel mit einem Stempelwerkzeug, um einen Schriftzug zu entfernen, kann man das später sehen. Du nimmst das veränderte Bild und verkleinerst es auf 50% in der Breite. ACHTUNG! Mit dem Verfahren: Nächstliegende, nearest.
Wenn dein Bild nun komplett grau ist, bzw. komplett bunt, je nach dem, mit welchen Pixel dein Bildbearbeitungsprogramm anfängt, siehst du an den manipilierten Stellen Flecken.
Bei dem grauen Bild wirst du dann bunte Flecken sehen an den Stellen, wo der Clonepinselbenutzt worden ist.
Ein anderer Trick:
Code: Alles auswählen
; Folker Linstedt, 11.08.2006, Farbfilter
#Image=1
#Datei=2
UseJPEGImageDecoder()
OpenConsole()
PrintN("FL-Studios (c) Folker Linstedt 2006, Stand 11.08.2006 Registriert fuer Anonym")
PrintN("Programm zum Veraendern der Farben: Erstellt BMP-Datei unkomprimiert 24 Bit")
PrintN("")
PrintN("FarbvertauschEffekte 0 bis 5, RGB,RBG,BGR,BRG,GBR,GRB Zufall: Empfohlen: -5/-6")
PrintN("Farbeffekt Null (0) erstellt eine Kopie von RGB nach RGB also unveraendert!")
PrintN(":: (3)/5 Ergibt bei normaler Hautfarbe Froschgruen ::")
PrintN(":: 7 Ergibt bei normaler Hautfarbe dunkelhaeutig ::")
PrintN("Graustufeneffekte: 6 durchschnitt, 7 dunkelste, 8 hellste, 9 Normalgrau")
PrintN("Der Durchschnitt ist uebrigens das selbe wie das Original ohne Saettigung!")
PrintN("Zufallszahlenraum von -9 bis -1, Effekt 0 bis 9")
PrintN("Das Rauschen von -7 bis -9 kann nicht durch Entsaettigung bereinigt werden!")
PrintN(">> Ansonsten mit Effekt 6 durch Raufziehen der .FL-Datei entfernbar")
PrintN("")
Print("(Bitte nur Ganze! eine Zahl): ");
Inpu.s=Input()
Eingabe.l=Val(Inpu)
CloseConsole()
Anzahl=CountProgramParameters()
For Index = 0 To Anzahl-1
LoadImage(#Image,ProgramParameter(Index))
StartDrawing(ImageOutput(#Image))
For y=0 To ImageHeight(#Image)-1
For x=0 To (ImageWidth(#Image)-1)
RR.l : GG.l : BB.l : p.l : R.l : G.l : B.l : Z.l
p=Point(x,y)
R=Red(p)
G=Green(p)
B=Blue(p)
If Eingabe<0
Z=Random(Abs(Eingabe))
Else
Z=Eingabe
EndIf
If Z=0
RR=R
GG=G
BB=B
EndIf
If Z=1
RR=R
GG=B
BB=G
EndIf
If Z=2
RR=B
GG=G
BB=R
EndIf
If Z=3
RR=B
GG=R
BB=G
EndIf
If Z=4
RR=G
GG=B
BB=R
EndIf
If Z=5
RR=G
GG=R
BB=B
EndIf
If Z=6
RR=(R+G+B)/3
GG=RR
BB=RR
EndIf
If Z=7
RR=R
If RR>G
RR=G
EndIf
If RR>B
RR=B
EndIf
GG=RR
BB=RR
EndIf
If Z=8
RR=R
If RR<G
RR=G
EndIf
If RR<B
RR=B
EndIf
GG=RR
BB=RR
EndIf
If Z=9
RR=R*0.3+0.59*G+0.11*B
GG=RR
BB=RR
EndIf
Plot(x,y,RGB(RR,GG,BB))
Next
Next
StopDrawing()
SaveImage(#Image,ProgramParameter(Index)+".FL")
Next
Mit diesem Programm kannst du RGB-Werte vertauschen.
Welchen Sinn hat das?
Wenn du RGB Werte vertauschst, bleibt der Grauwert der selbe, wenn du die Sättigung entfernst.
Damit kannst du in ein Bild zum Beispiel verkrisselte Muster einbringen, die erst nach der Bildmanipulation sichtbar werden. Funktioniert auch noch bei JPEG mit 90%, ohne Subsampling. Bei Subsampling wird es schon kritisch.
Beispielbild:

Wenn man bei dem Bild die Sättigung auf 0 stellt, bekommt man ein gut erkennbares Gesicht. So könnte man auch Wasserzeichen verschlüsseln.
Original
Hier ist mir eingefallen, dass man auch mit den RGB-Filtern arbeiten kann.
Zum Beispiel über das gesamte Bild blaue und grüne punkte verstreuen, auch rote. Die sehen wahllos aus. Auch fast nicht sichtbar ähnlich wie die Streifen. Wenn man aber die Kanäle in Rot, Grün und Blau teilt, erhält man drei schwarzweiß Bilder, die jeweils ein eigenes Bild, einen Schriftzug oder ein LOGO etc. enthalten können.
Kann man sich schnell auch selbst basteln mit den meisten Bildbearbeitungsprogrammen, die Ebenen und Kanäle unterstützen.
Die Frage hierbei ist nur, wie stark wird das Original verändert.
Und das kann bei einer großflächigen Überlagerung schon sehr unschön aussehen. Und bei einzelnen Punkten kann es sein, dass diese nicht eindeutig wieder zu erkennen sind wenn man die JPEGs mit Subsampling speichert.
Könnt ja mal schreiben, wie ihr meine Ansätze so findet.
Ansonsten ist Bildschutz wie Passwortschutz, CrackSchutz, Virenschutz ... etc. nur eine Frage der Zeit, bis man es umgangen hat.
Man kann auch JavaScripte benutzen, um das Verschieben der Bilder zu vermeiden oder das Kopieren mit der Maustaste oder man legt eine transparente GIF drüber. Aber gegen einen ScreenShot, der zeitgesteuert ist, kann keine Methode etwas ausrichten.
Am besten gar nicht erst ins Internet hochladen die Bilder
>>>>>> Beide Methoden sind nur auf Farbbilder bzw. bunte Flächen anwendbar.
Es gibt ja nur zwei Möglichkeiten, wie du deine Bilder markierst.
Entweder durch Manipulation der Farbinformationen oder durch Metadaten. Metadaten können entfernt werden.
Ich nehme an, du bist nicht Urheber der Bilder und der User kann diese Bilder auch von anderer Stelle laden. Du willst also eher nur herausfinden, wie oft die Bilder wieder hochgeladen werden, wenn sie von dir runtergeladen worden sind.
Denn sonst, wenn es deine Bilder sind, weißt du ja, was auf dem Bild zu sehen ist. Du bräuchstest sowieso noch eine Art Bot, der das Internet nach Bildern durchsucht und so illegale UpLoads aufspürt.
Du kannst die Farbwerte nach einem bestimmten Schema verfälschen.
Und eine Originaldatei auf deinem Rechner belassen.
Wenn du nun Original und Kopie mit einander vergleichst, müssen bestimmte Merkmale sichtbar werden. Tun sie es nicht, so liegt ein Bild vor, was nicht von deinem Server kopiert wurde, aber für das menschliche Auge gleich aussieht.
So ähnlich funktionieren Fahrschulbögen bei der Auswertung.
Man legt eine Schablone auf den Fragebogen und wenn an allen Löchern Kreuze sind, hat man das richtig.
Hierbei sollte Bild.png ein Bild sein, welches weiß ist und schwarze Schrift enthält. Die Resultatbilder ergeben nur in Kombination wieder das erste Bild.
Code: Alles auswählen
;/ Folker Linstedt
;/ 2007|11|29
UsePNGImageDecoder()
UsePNGImageEncoder()
;UseJPEGImageDecoder()
;UseTGAImageDecoder()
;UseTIFFImageDecoder()
If LoadImage(0,"C:\Bild.png")
x=ImageWidth(0)
y=ImageHeight(0)
CreateImage(1,2*x,2*y)
CreateImage(2,2*x,2*y)
Dim F(x,y,1)
StartDrawing(ImageOutput(0))
For i2=0 To y
For i=0 To x
c=Point(i,i2)
F(i,i2,0)=Random(1)
If C>0
F(i,i2,1) = F(i,i2,0)
Else
F(i,i2,1) = 1 - F(i,i2,0) % 2
EndIf
Next
Next
StopDrawing()
For u=0 To 1
StartDrawing(ImageOutput(u+1))
For i2=0 To y
For i=0 To x
If F(i,i2,u)
S=#Black
W=#White
Else
S=#White
W=#Black
EndIf
Plot(i*2+0,i2*2+0,S)
Plot(i*2+1,i2*2+0,W)
Plot(i*2+0,i2*2+1,W)
Plot(i*2+1,i2*2+1,S)
Next
Next
StopDrawing()
SaveImage(u+1,"C:\Bild"+Str(u)+".png",#PB_ImagePlugin_PNG)
Next
EndIf
Ausgangs Bild (Original)
Erstellt:

und
Wenn beide überlagert werden und man die weißen Pixel transparent macht oder beide Bilder anders verrechnet, kann man den OriginalText wieder lesen.
>>>>> Dieses Verfahren übersteht sogar Verkleinerung bis zu einem gewissen Grad. Genau 50% wäre hier allerdings "tödlich", da dies nur eine graue Fläche ergibt.
Den Schlüssel muss man auf die Größe anpassen, bildet man eine Differenz zwischen beiden Bildern, so sollte man den Schriftzug XABY Bild3 erhalten.
>>Resultat nach Verkleinerung auf 40% in der Breite bikubisch, JPEG 90%
Schlüssel ebenfalls auf 40% in der Breite verkleinert.
Überlagert, Differenz gebildet, Resultat:
Vorteil: Funktioniert bei SW wie bei Farbigen Bildern.
Nachteil, gleichmäßige Fläche muss irgendwo unauffällig im Bild untergebracht werden.
