Michael Waldmann: Pixelgröße eines Bildes ermitteln

Hallo zusammen,

hat jemand eine Idee, wie man mit Perl oder Javascript die Größe eines Bildes ermitteln kann, das auf einem fremden Server liegt (also mit http://...bild.gif ansprechbar ist)? Gemeint ist die Größe in Pixeln, nicht in Bytes. Und zwar geht es mir daraum, die Größe zu ermitteln, ohne dass das Bild angezeigt wird. Mit document.ImageName.width usw. ist die Ermittlung mit Javascript ja nur dann möglich, wenn das Bild schon sichtbar ist.

Danke im voraus...
Michael

  1. Hallo Michael,

    hat jemand eine Idee, wie man mit Perl oder Javascript die Größe eines Bildes ermitteln kann, das auf einem fremden Server liegt (also mit http://...bild.gif ansprechbar ist)?

    Mit JavaScript sehe ich da keine Moeglichkeit. Mit Perl kannst du so was in der Art machen:
    use LWP::Simple;
    $Datei = get("http://www.xy.de/datei.jpg");
    $Bytes = length($Datei);

    Ob das jetzt so funktioniert, oder ob es Probleme wegen der Binaerdaten gibt, weiss ich nicht. Musst du mal ausprobieren.

    viele Gruesse
      Stefan Muenz

    1. Mit Perl kannst du so was in der Art machen:
      use LWP::Simple;
      $Datei = get("http://www.xy.de/datei.jpg");
      $Bytes = length($Datei);

      Das löst aber Michaels Problem nicht - der wollte ja die Bildgröße in x * y Pixeln (beispielsweise um sein Layout darauf abzustimmen oder was auch immer).

      Nach dem "get()" wäre also auch noch der Header der JPEG-Datei entsprechend zu interpretieren - also Dateiformate nachschlagen und passende Bytes mit den Größenangaben aus $Datei herauspfriemeln ...

    2. hat jemand eine Idee, wie man mit Perl oder Javascript die Größe eines Bildes ermitteln kann, das auf einem fremden Server liegt (also mit http://...bild.gif ansprechbar ist)?

      ...

      $Datei = get("http://www.xy.de/datei.jpg");
      $Bytes = length($Datei);

      Danke für den Tip! Nur geht es mir (wie ich auch geschrieben hatte) um die Bildgröße in Pixeln (also Breite x Höhe) und nicht um die Dateigröße. Fällt Dir dazu vielleicht etwas ein?

      Grüße
      Michael

  2. Hallo Michael

    hat jemand eine Idee, wie man mit Perl oder Javascript die Größe eines Bildes ermitteln kann, das auf einem fremden Server liegt (also mit http://...bild.gif ansprechbar ist)? Gemeint ist die Größe in Pixeln, nicht in Bytes. Und zwar geht es mir daraum, die Größe zu ermitteln, ohne dass das Bild angezeigt wird. Mit document.ImageName.width usw. ist die Ermittlung mit Javascript ja nur dann möglich, wenn das Bild schon sichtbar ist.

    Falls Du die Datei binär vorliegen hast, kannst Du die Breite und Höhe aus der Datei auslesen.
    Für GIF-Builder hilft da folgender Perl-Code:

    $Breite =  unpack("v",substr($GifStream,7,2));  # 7.+ 8. Byte in der GIF-Datei
    $Höhe =   unpack("v",substr($GifStream,9,2));  # 9.+ 10. Byte in der GIF-Datei

    Müssen mit unpack("v",2Bytes) vom Little-Endien- ins Big-Endien-Format umgewandelt werden.

    Zum Thema GIF-Datenformat gibts einen ausführlichen Thread von Cheatah und Klaus aus dem Januar 99 im Archiv.

    Für PNG-Dateien verweise ich auf die PNG-Spezifikation, die unter http://www.w3.org/TR/ zu finden ist.

    Bei JPEG habe ich gar keine Ahnung.

    Grüsse

    Tom

    1. Hi Tom,

      $Breite =  unpack("v",substr($GifStream,7,2));  # 7.+ 8. Byte in der GIF-Datei
      $Höhe =   unpack("v",substr($GifStream,9,2));  # 9.+ 10. Byte in der GIF-Datei

      Klingt gut. Ich werde es morgen mal ausprobieren. Wenn es tatsächlich funktioniert, mache ich mich auf die Suche nach dem Aufbau von JPEG's.

      Ciao,
      Michael

      1. Hi,

        Klingt gut. Ich werde es morgen mal ausprobieren. Wenn es tatsächlich funktioniert, mache ich mich auf die Suche nach dem Aufbau von JPEG's.

        http://www.wotsit.org ;-)

        Cheatah

  3. Hallo ihr,

    ihr macht es euch wohl gerne schwer, was? ;)
    Man kann zwar nicht um das Laden des Bildes herum kommen.. doch sichtbar muss es nicht sein.

    Versucht mal folgendes:
    <script>
    var bild = "http://www.teamone.de/selfhtml/xweb.gif";
    document.write("<IMG STYLE="visibility:hidden" SRC="" + bild + "" NAME="testimg">");

    alert(document.testimg.width + " x " + document.testimg.height);  
    

    </script>

    Nix zu sehn, und die Maße sind trotzdem bekannt ;)

    PS: Mit nem lokalen Bild gehts noch einfacher:
    <script>
    img = new Image();
    img.src = "http://www.teamone.de/selfhtml/xweb.gif";
    alert(img.width + " x " + img.height);
    </script>
    Das Bild muss also nicht mal geladen sein. (Klappte zum. bei mir so. Vielleicht kam es auch einfach aus dem Cache und deswegen gings.. müsste man genauer prüfen)

    Gruss,
      David