Sich in einem Bild verewigen

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Probiers aus :)

Denke aber auch das es zu 99% futsch is....

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

@hardfalcon:
Ich weiß nicht ... ich habe zwar schon Fotos von Fotolia (die das, wie eine Google-Recherche ergab, auch einsetzen) gekauft, aber weder ist mir da was aufgefallen, noch kenne ich dieses Verfahren.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Bildschutz oder Bildverfolgung?

Da ich selbst ja auch einige Bilder mache :mrgreen:
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
Bild

Mit Streifen:
Bild

Wenn es nicht verändert worden ist:
Bild

Wenn es zum Beispiel an den Armen manipuliert wurde
Bild


Das Programm macht graue Streifen in eine Bilddatei.

Mit etwas Fantasie sieht man die fast nicht :D
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:
Bild
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
Bild


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 :shock:


>>>>>> 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)
Bild

Erstellt:
Bild
und
Bild

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:
Bild

Vorteil: Funktioniert bei SW wie bei Farbigen Bildern.
Nachteil, gleichmäßige Fläche muss irgendwo unauffällig im Bild untergebracht werden.

:roll:
Kinder an die Macht http://scratch.mit.edu/
Antworten