'Bilderkennung' für anfänger

…folgende idee:
auf einer internetseite gibt es eine dynamisch generierte grafik (png) z.b. eine wetterkarte.

nun möchte ich mittels php und evtl. zusatzfunktion (GD o.ä.) aus einem wählbaren ausschnitt dieser grafik testen, ob sich etwas an der grafik geändert hat.

hat jemand ideen wie man vorgehen könnte…? evtl. den zu untersuchenden ausschnitt als grafik ausschneiden, irgendeine eine checksumme daraus bilden, und nach einem gewissen zeitintervall erneut den ausschitt untersuchen, ob es eine veränderung gibt.

beispiel: der zu untersuchende ausschnitt ist komplett grau, bei erneuter betrachtung gibt es z.b. blaue strukturen. irgendwie müsste man da doch rein programmiertechnisch etwas verändertes feststellen können…oder?

lg
björn

…folgende idee:
auf einer internetseite gibt es eine dynamisch generierte
grafik (png) z.b. eine wetterkarte.

nun möchte ich mittels php und evtl. zusatzfunktion (GD o.ä.)
aus einem wählbaren ausschnitt dieser grafik testen, ob sich
etwas an der grafik geändert hat.

Hi Björn,

Würde es nicht reichen, wenn Du überprüfst, ob sich das Erstellungsdatum der Datei geändert hat? Was ist denn das Ziel des Ganzen?

Gruß,
Rudy

nö, würde es nicht…
weil:

auf einer internetseite gibt es eine dynamisch generierte
grafik (png) z.b. eine wetterkarte.

dynamisch generiert und png lassen darauf schliessen dass es mit GD2 generiert wird und damit u.U. bei jedem Seitenaufruf…
Ich weiss aber im Moment ned mal ob die Bilder immer die gleiche Checksumme bekommen, wenn man sie gleich speichert ^^

Mit curl einlesen, cachen, bearbeiten, crc32
Hi nochmal,

dynamisch generiert und png lassen darauf schliessen dass es
mit GD2 generiert wird und damit u.U. bei jedem
Seitenaufruf…

(Danke Munich fürs ‚Tomaten von den Augen nehmen‘) Verstehe, wenn es nicht gerade ein Flash/Applet ist - und das ist es ja nicht - und die Quelle bekannt ist, die es generiert (das png selbst, php, asp was weiß ich), dann kann Du in jedem Fall mal den ganzen Inhalt als String buffern und speichern. Daraus schneidest Du das Quadrat aus, welches Du vergleichen möchtest, und bildest daraus die Checksumme. Die ändert sich übrigens immer, wenn sich der Inhalt des Bereichs ändert. Dass zwei verschiedene Bilder dieselbe Checksumme haben ist sehr unwahrscheinlich - aber nicht unmöglich, da die Bildinformation ja auf eine Zahl reduziert wird.
Für den Vergleich würdest Du aber ein Quadrat ablegen, mit dem Du das von der entfernten Seite vergleichst. Oder aber Du liest einmal einen Bildauschnitt ein und speicherst die Information, und überprüfst nachher nur mehr, ob sie sich geändert hat.

Wie man den Bildausschnitt aus einem entfernten PNG schneidet und die Checksumme ausgibt, habe ich Dir in dem Programm unterhalb reingepackt.

<?php $ch = curl_init();<br /> $url = 'http: //www.atmos.uiuc.edu/camera/webcam.php/webcamsm.png'; 
 curl\_setopt ($ch, CURLOPT\_URL, $url);
 curl\_setopt ($ch, CURLOPT\_HEADER, 0);
 ob\_start();
 curl\_exec ($ch);
 curl\_close ($ch);
 $string = ob\_get\_contents();
 ob\_end\_clean();
 $tmpfile = './tmp'.session\_id().'.png';
 $f = fopen($tmpfile, 'w+');
 fwrite($f, $string);
 fclose($f);
 $srcimg = imagecreatefrompng($tmpfile);
 $destimg = imagecreatetruecolor(10, 10);
 imagecopy($destimg, $srcimg, 0, 0, 20, 30, 10, 10);
 print(crc32($destimg));
 //header("Content-type: image/png");
 //imagepng($destimg);
?\>

Das Beispiel schneidet ein 10x10 Quadrat von Position x:20, y:30 des Originalbildes aus und gibt die Checksumme aus. (Die URL musst Du natürlich korrigieren, der Space ist nur wegen des allzu fleißigen Linkparsers hier eingefügt). Zum Test kannst Du das Print auskommentieren und dafür mit header und imagepng das ausgeschnittene Quadrat ausgeben.

HTH, Gruß
Rudy

1 Like

Ergänzung
Damit Du nicht nach einer Zeit haufenweise temporäre Bilder auf dem Server hast, füge zuletzt die Zeile

 unlink($tmpfile); 

ein, dass die Datei gelöscht wird.

ich geb Dir jetzt einfach mal nen Stern auch wenn ich das garnicht brauche ^^

VIELEN DANK!!!
das ist genau dass wonach ich gesucht habe!

lg
björn