Page 1 of 1

Bilder vergleichen

Posted: 2003-05-16 10:46
by zakmc
Hallo,
ich wollte mir ein Programm schreiben, daß meine Urlaubsfotos verwaltet. Die Digitalkamera nennt die Bilder immer gleich, wenn ich sie von der Kamera lösche. Ich ahbe mir 2 Ordner gemacht ein neu ein fertig. Ich lese das Verzeichnis neu ein und benenne dann die Bidler um und kopiere Sie in den fertig Ordner. Ich möchte sehr gerne vermeiden, daß dort Doppelte Bilder erstellt werden. Kann man irgendwie prüfen,ob das Bild schon vorhanden ist? Nicht den Namen des Bildes sondern quasi den Inhalt.

Re: Bilder vergleichen

Posted: 2003-05-16 14:23
by thomi
zakmc wrote:Kann man irgendwie prüfen,ob das Bild schon vorhanden ist? Nicht den Namen des Bildes sondern quasi den Inhalt.
Ich nehme mal an, du meinst einen Vergleich auf exakt dasselbe Bild? Da du nix zur Programmiersprache geschrieben hast, hier die Lösung auf der Shell:

Code: Select all

diff DATEINAME1 DATEINAME2
Sind die Dateien gleich, erscheint keine Ausgabe, sonst eine entsprechende Meldung.

Re: Bilder vergleichen

Posted: 2003-05-21 17:02
by zakmc
wollte das eigentlich mit php machen aber shell geht genauso gut. kann ja einen systemaufruf amchen
thx

Re: Bilder vergleichen

Posted: 2003-05-21 17:45
by gamecrash
Hm, unter php hilft Dir evtl. die Funktion md5_file() weiter... ich glaub die vergleicht nur den Inhalt. Und wenn Du die zwei Hashwerte der zwei Dateien vergleichst und die gleich sind, sind die Bilder auch gleich.

Naja, also probiert hab ich's nicht, musste n bissel mit experimentieren.

Re: Bilder vergleichen

Posted: 2003-05-21 19:22
by zakmc
das werde ich auf jeden fall probieren. thx
wenn das funktioniert wäre das auch noch besser als das erste

Re: Bilder vergleichen

Posted: 2003-05-21 22:35
by zakmc
habe es hinbekommen
vielen dank euch beiden

Re: Bilder vergleichen

Posted: 2003-05-22 08:49
by thorsten
Fürs Archiv wäre dein Codeschnipsel nicht schlecht 8)

Re: Bilder vergleichen

Posted: 2003-05-22 23:45
by zakmc
kein Problem. habe Kommentare eingefügt und hoffe das es daruch verständlich wird, ansonsten einfach hier posten oder ne pm

Code: Select all

    include_once("function/mydb_connect.php");  //PHP Function um die Verbindung zur DB herzustellen
    $connid=connect_to_mydb();  //DB Verbindung aufbauen
    $read_dir="neu";  //Name des einzulesenden Verzeichnisses
    $write_dir="bilder";  //Name des Verzeichnis wo das Bild gespeichert werden soll
    $fp_v=opendir($read_dir);  //Ã?ffnen eines Verzeichnis, gibt Verzeichnis-Handler zurück
    while($datei=readdir($fp_v)) {  //Gesamtinhalt des Verzeichnisses einlesen
      if(is_dir("$read_dir/$datei"))  //prüfen, ob es sich um ein Verzeichnis, parent directory oder upper directory handelt
        continue;  //sprung zum while
      $fp_r=fopen("$read_dir/$datei","r");  //Bild zum lesen öffnen
      $string=fread($fp_r,filesize("$read_dir/$datei"));  //Bild einlesen
      fclose($fp_r);  //Offne Datei schließen
      $hash=md5($string);  //Hashwert des String ermitteln
      if(mysql_num_rows(mysql_query("SELECT bildid FROM bild WHERE hash='$hash'"))>0)  //prüfen, ob hash schon in DB
        continue;  //sprung zum while
      mysql_query("INSERT INTO bild SET hash='$hash'");  //Hashwert in DB speichern
      $imgname=mysql_insert_id().".jpg";  //neuen Namen für das Bild erstellen, damit der Name eindeutig wird
      $fp_w=fopen("$write_dir/$imgname","w");  //Datei zum schreiben öffnen
      fwrite($fp_w,$string);  //Bild schreiben
      fclose($fp_w);  //Datei schließen
      unlink("$read_dir/$datei");  //Bild löschen
    }
    closedir($fp_v);  //Verzeichnis schließen

Re: Bilder vergleichen

Posted: 2003-05-24 09:01
by jtb
falls deine DigiCam Exif unterstützt, würde ich nur diese Header vergleichen - könnte ein bißchen schneller sein..

Re: Bilder vergleichen

Posted: 2003-05-24 11:22
by zakmc
Mmmhhhh also im Handbuch steht nichts davon ..
was istd as denn überhaupt?

Re: Bilder vergleichen

Posted: 2003-05-24 11:23
by jtb

Re: Bilder vergleichen

Posted: 2003-05-24 11:37
by zakmc
Das werde ich heute oder morgen Abend gleich mal ausprobieren.
THX