sicherstellen, dass ein bild nur geladen wird, wenn es komplett verfügbar ist

  • gude zusammen,

    also ich hab ne ip-cam, die lädt bilder in nen webspace, weil ich die serverlast/leitungslast daheim minimiert haben will.
    mit javascript is es ja easy da wieder aus den bildern etwas bewegung rauszuholen.
    jetzt is nur die frage folgende:

    ich lade alle 5 sekunden nen bild in den webspace, wenn jetzt jemand diese slideshow aufruft sind da teilweise die pics truncated, weil ja nich das ganze bild hochgeladen wurde, wenns das script abfragt.

    wie kann ich sicherstellen, dass ein bild komplett hochgeladen wurde bzw komplett runtergeladen und angeguckt werden kann?

    ob php oder javascript als lösung is mir wurst, nur is des echt mau wenn da so häufig halbe bilder vorkommen

  • Naja, wenns we Webcam ist sind die Bilder bzw. Dateien sicherlich alle gleich groß? Du könntest ja das Bild über PHP abfragen und PHP prüft dabei, ob die Datei schon so groß ist, wie sie sein sollte. Wenn nich, wird der Browser halt noch etwas hingehalten, ich denke 1-2 sekunden wird das Timeout nicht überschreiten. Wäre nur gut, wenn PHP ne sleep funktion hat, was ich atm nicht weiss.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • getimagesize liefert für Breite und Höhe eine 0,wenn das Bild kaputt ist, vielleicht funktioniert das bei nicht vollständig hochgeladenen Bildern auch.

  • ja an sowas, was tobse schreib hatte ich auch schon gedacht und sleep gibt es ja tatsächlich..
    ich hab auch schon überlegt den interval im javascript auf ne halbe sekunde zu setzen, so siehts dann ja auch aus, als würd das bild wat langsamer geladen, aber ich befürchte dass irgendwann einfach dat script stoppen wird, wenn die pics ewich kapott sind.

    ich probier des mal so und hoff einfach, dasset fruchtet :D

    ne funktion imageBroken() gibts net wa??^^

  • Auf sleep würde ich verzichten. Wenn das Bild noch nicht ok ist, wird es eben nicht angezeigt.

  • hab heut mal ne minute gehabt zum testen...

    der angehängte screen zeigt, dass es mit getimagesize wohl doch net geht.

    habs mehrfach geladen und nur einmal kam nen false zurück mit ner notice, konnte des aber net mehr nachstellen

    edit: aber das mit der filesize scheint möglich zu sein, die variiert tatsächlich von aufruf zu aufruf, bei dem die pics kaputt sind

    Einmal editiert, zuletzt von synaptic (9. April 2012 um 10:49)

  • Wie werden die Bilder auf den Server kopiert? Kannst du danach ein Script auf dem Server aufrufen? Wenn ja, lasse die Bilder erst in ein temporäres Verzeichnis uploaden und verschiebe sie dann per Script in das richtige Verzeichnis.

    Die letzten zwei Bilder nicht anzeigen bei der Slideshow ;)


    Das ist keine schlechte Idee, das würde ich sogar bevorzugen, da am leichtesten und mit wenig Performance zu implementieren

    Einmal editiert, zuletzt von Bandit (9. April 2012 um 10:59)

  • das is nen ganz normaler upload via ftp mit nem interval von 5 sekunden
    d.h alle 5 sekunden wird das einzige bild (kaltraum.jpg) hochgeladen, ich kann kein weiteres script triggern.

    und ich schnall nich was mit den letzten zwei bildern gemeint is.


    funktionsweise vom javascript:
    in einem interval x wird eine biledquelle geladen und bekommt einen get-param, damit immer nen neues bild geladen wird.
    das js verknuspert keine prüfung ob das bild in ordnung is. selbst das mit der größe haut bisher irgendwie nich so ganze hin, da je nach bild die größe variiert.
    sind 2 kaninchen zu sehen hat das bild zb 30kb bei einem nur 29 oder so, auf jeden fall hatte ich selten die gleiche größe bei der prüfung.

  • Du kannst ja mal ein total weisses JPEG bild mit der gleichen größe erstellen, dann weisst du, welche größe es auf jeden Fall haben muss. Ich hab mir das so vorgestellt:

    PHP
    while (@filesize("kaltraum.jpg")<$size) {
        sleep(500);
    }
    header("Content-type: image/jpeg");
    readfile("kaltraum.jpg");

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ich ging davon aus, dass du die Bilder alle 5Sekunden neu speicherst, also nicht überschreibst. Sagen wir du hast einen Ordner wo imemr die Bilder der letzten 10Minuten drinn sind und alle 5 sekunden ein neues hinzukommt und das älteste gelöscht wird. Dann könntest du bei einer slideshow die neusten zwei bilder weglassen bei der ausgabe um zu garantieren, dass die bilder voll hochgeladen sind.
    Aber ich glaube du hast nur ein bild sozusagen :P

  • Du kannst ja mal ein total weisses JPEG bild mit der gleichen größe erstellen, dann weisst du, welche größe es auf jeden Fall haben muss.


    Leider nicht, diese Datei wird kleiner sein.

  • Ich dachte

    PHP
    filesize("kaputt.jpg")<filesize("weiss.jpg")<filesize("echtesbild.jpg")


    und solange

    PHP
    filesize("kaltraum.jpg")<fielsize("weiss.jpg")


    gilt, ist kaltraum.jpg nicht fertig hochgeladen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Liese sich evtl. ein anderes Format einstellen mit weniger kompression, bei dem die Bildgröße besser zu berechnen ist, etwa BMP oder PNG? Evtl. hilft dir auch die GD Library weiter:

    PHP
    imageCreateFromJPEG(string $filename);
    Zitat von php.net

    Returns an image resource identifier on success, FALSE on errors.


    Und ein korruptes bild sollte nen error liefern.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Das ist alles zu aufwändig! Ich schätze mal, die Dateinamen enthalten das Datum und genauer Uhrzeit. Dann einfach das Verzeichnis mit glob einlesen und die letzten 1 bis 2 Bilder aus dem Array weglassen. Schlimmstenfalls hinkt die Slideshow so 10 Sekunden hinterher.

  • ich hab heut nochma mit den anderen entwicklern hier in der agentur gebabbelt..
    sind zum entschluss gekommen, dass des vorhaben mit der verfügbaren technik der webcam für die füße is..^^
    zum einen blockier ich durch den upload im 5-sek-interval alle 5 sekudnen nen port für nen bild was sich nich zwingen angeguckt wird.

    ich werd das ganze dann wohl so machen, dass ich alle 20 oder 30 sek nen bild hochlade, was dann ohne slide-show als standbild angezeigt wird.. sollte/muss dann halt reichen.

    danke für alle inspirationen bisher :)