AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hash eines Bildes?

Ein Thema von gandime · begonnen am 6. Jun 2007 · letzter Beitrag vom 6. Jun 2007
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

Hash eines Bildes?

  Alt 6. Jun 2007, 12:35
hi,
Ich möchte ein Programm schreiben, welches ein Bild einen wert o.ä. entnimmt, damit ich es mit einem anderen vergleichen kann und ggf. darauf handle.
Das ganze soll dann über das Inet laufen, weshalb ich nicht die Bilder verschicken möchte sondern einen Wert.
Ich habe mir schon überlegt die Byte Zahl zu verschicken daher das ist glaube etwas ungenau oder?
Und den Wert zu ermitteln sollte keinen großen Rechenaufwand sein, da viele Bilder nacheinander einen Wert bekommen sollen!

Gibt es eine Möglichkeit dafür?

mfg
gandime
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: ein Quersumme oder sowas in der Art eines Bildes?

  Alt 6. Jun 2007, 12:36
So etwas nennt sich Hash. Einfach mal danach suchen, vielleicht findest du direkt eine Funktion, der du eine Datei übergibst, und die dir dann den Hashwert liefert.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

Re: ein Quersumme oder sowas in der Art eines Bildes?

  Alt 6. Jun 2007, 13:02
das einzige sinnvolle was ich gefunden habe is folgendes:
Zitat:
Zunächst mußt du das bild laden. Danach verkleinerst du das Bild auf z.b. 16x16. Anschliessend liest du alle pixel des bildes aus, je nach farbe getrennt. Das ist dein Bildhash. Wenn du jetzt bilder mit einander vergleichst, mußt du die differenzen beider hasches über die stringlänge zusammen addieren und durch die anzahl der bytes teilen. Dann mußt du über den dreisatz einmal ermitteln, wie viel proznt das sind. Anhand der prozentzahl siehst du, ob die bilder gleich sind oder nicht. Bei mir hat sich herrausgestellt, das ein Schwellwert von 4% am besten geeignet ist
quelle: http://entwickler-forum.de/archive/i...p/t-25168.html

bis jetzt habe ich folgendes:
Delphi-Quellcode:
  for I := 0 to b_temp.Width - 1 do
  begin
    for ii := 0 to b_temp.Height - 1 do
    begin
      i_z_wert:=b_temp.Pixel[i,ii]//hier


    end;
  end;
an der Makierten stelle ist meine erste Frage wie bekomme ich von dem Pixel die rot blau gelb Werte und wie werden sie zusammengerechnet?

edit:
hab ich das so jetzt richtig gemacht?
Delphi-Quellcode:
var
  b_temp:tbitmap32;
  i,ii,i_size,i_z_wert:integer;
  r_temp:real;
  st_temp:tmemorystream;
  s_temp:string;
begin
  b_temp:=tbitmap32.create;
  b_temp.LoadFromFile('a.bmp');
  i_z_wert:=0;
  for I := 0 to b_temp.Width - 1 do
  begin
    for ii := 0 to b_temp.Height - 1 do
    begin
      i_z_wert:=i_z_wert+GetRValue(b_temp.pixel[i,ii]);
      i_z_wert:=i_z_wert+GetGValue(b_temp.pixel[i,ii]);
      i_z_wert:=i_z_wert+GetBValue(b_temp.pixel[i,ii]);
    end;
  end;
  st_temp:=tmemorystream.create;
  b_temp.SaveToStream(st_temp);
  i_size:=st_temp.Size;
  st_temp.free;
  b_temp.Free;
  s_temp:=inttostr(i_z_wert);
  r_temp:=length(s_temp)/i_size;
  showmessage(floattostr(r_temp));
  Mit Zitat antworten Zitat
GTA-Place

Registriert seit: 5. Apr 2004
Ort: Weingarten
91 Beiträge
 
Delphi 7 Personal
 
#4

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 13:44
Frage: Brauchst du unbedingt einen Toleranz-Wert? Wenn du nur wissen willst, ob das exakt die selbe Datei ist, gibt es bessere Verfahren.
Fabian
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 13:56
so das Problem dabei is das es im Prinziep das selbe Bild ist aber ich wandele es vorher in jpg um.
Ist es denn möglich dass der Sich das bild dann minimal ändert?
  Mit Zitat antworten Zitat
GTA-Place

Registriert seit: 5. Apr 2004
Ort: Weingarten
91 Beiträge
 
Delphi 7 Personal
 
#6

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 14:01
Dann wird der Header anders und die Checksum (Hash) würde was anderes ergeben.
Fabian
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#7

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 14:15
wie kann ich das vermeiden?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#8

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 14:37
garnicht.

würde es dir aber nichr reichen, wenn du das Änderungsdatum der Dateien prüfst?

du könntest in diesem Falls höchstens den Dateiinhalt, also die Pixel selber vergleichen, aber da im JPeg die Pixel sich ebenfalls verändern (Aufgrund der Komprimierung) könnte man da nur mit näherunswerten vergleichen, welches wiederrum nicht über einen Hash (über die die/das gesamte Datei/Bild) möglich wäre.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#9

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 14:46
nein das geht nicht da das Bild immer wieder neu gemacht wird!
dadurch fällt das weg!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#10

Re: Hash eines Bildes?

  Alt 6. Jun 2007, 14:50
Tja, dann mußt du halt nach etwas (Kleinem) suchen, welches quasi eindeutig die Datei indentiviziert.

Oder du schaffst dir soewas.
Irgendwo (z.B. im Dateinamen oder irgendeiner Liste) einen wert speichern, welcher dat Bild und seinen Status repräsentiert ... und dann diesen Wert vergleichen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz