sunawa: Problem mit Modul Image::Size

Hallo!

Nachdem ich nun seit mehr als zwei Jahren passiver Nutzer des Forums bin und bisher alle anstehenden Probleme mit der Archivsuche lösen konnte (wofür ich mich bei allen hier aktiv beteiligten bedanken möchte), komme ich nun mal wirklich nicht mehr weiter...

Mein Problem:

Ich musste auf dem Server das Modul Image::Size nachinstallieren.
Soweit so gut. Es soll mir die Grösse von Grafiken auslesen. Dazu wird die entsprechende Grafik temporär auf dem Server gespeichert und danach durch das Modul geschickt. Klappt soweit - die Grafikdatei wird vom Modul eingelesen, jedoch bricht das Modul an folgener Stelle ab:
grep($header =~ /$_/ && (($x, $y, $id) = &{$type_map{$_}}($handle)),keys %type_map);
Das Problem scheint zu sein (???), dass die Variable $_ keinen Inhalt hat, leider habe ich auch keine Ahnung welchen Inhalt sie denn haben müsste.

Für jede Hilfe bin ich dankbar,

sunawa

P.S.
Ich möchte an dieser Stelle auch einmal darauf hinweisen, dass die so häufig kritisierten "Mehrfachfragen" (d.h. Antworten schon im Archiv vorhanden) mir persönlich sehr geholfen haben, da ich mit meinen Stichworten bei der Suche somit eher fündig wurde. Als Anfänger weiß man nämlich häufig noch nicht wonach man suchen muss....

  1. hallo sunawa,

    gleich vorab: sorry, eine direkte Hilfe kann ich dir nicht anbieten. Ich verwende Image::Size schon seit langem und ohne jegliche Probleme.

    Hast Du die neueste Version aus'm CPAN?

    Um welchen Dateityp (GIF, JPEG, TIFF) handelt es sich?

    alles, was ich Dir anbieten kann ist, daß Du mal einen Link auf das Bild schickst + ich seh' mir das mal an (4 Augen sehen manchmal mehr als 2). Kannst Du ja beim Antwort-Posten unten als "Grafik-URL (optional):" angeben.

    Ansonsten: der Autor von Image::Size ist - wenn ich mich recht erinnere - ein Deutscher. Vielleicht reagiert er ja auf eine Mail.

    K@rl

    -----
    entferne NO-SP-AM- von eMail Adresse

    1. Hallo K@rl;

      danke für Deine Reaktion.

      Hast Du die neueste Version aus'm CPAN?

      ja, habe ich

      Um welchen Dateityp (GIF, JPEG, TIFF) handelt es sich?
      alles, was ich Dir anbieten kann ist, daß Du mal einen Link auf das Bild schickst + ich seh' mir das mal an (4 Augen sehen manchmal mehr als 2). Kannst Du ja beim Antwort-Posten unten als "Grafik-URL (optional):" angeben.

      Danke für Dein Angebot, aber es liegt nicht an der Grafik, es liegt ihrgenwie am beschriebenem "grep", d.h. es erfolgt erst gar keine Weiterleitung (so glaube ich) an das Unterprogramm welches den jeweiligen Dateityp aufruft.

      Ansonsten: der Autor von Image::Size ist - wenn ich mich recht erinnere - ein Deutscher. Vielleicht reagiert er ja auf eine Mail.

      Gute Idee, sollte ich vieleicht mal testen

      Grüße,

      sunawa

      1. vielleicht postest du doch mal den Code Schnipsel, in dem du Image::Size aufrufst. Vielleicht ist es einfach ein ganz harmloser Fehler

        1. vielleicht postest du doch mal den Code Schnipsel, in dem du Image::Size aufrufst. Vielleicht ist es einfach ein ganz harmloser Fehler

          Nun denn, nachfolgend der Code:

          maximale Bildgrösse:

          $max_width = 200;

          upload des Bildes, Funktion resd_data siehe unten, funktioniert aber auch:

          $img_name = &read_data;

          Vergleich der Bildgrösse mit der Maximalgrösse:

          if ($img_name ne "0") {
            use Image::Size;
            # Get the size of message_img
            ($x_wert, $y_wert, $id_wert) = imgsize($img_name);
            if ($x_wert < $max_width) {$bild_width = $x_wert;}
            else {$bild_width = $max_width;}
           }

          sub read_data {
            $url = $message_img;
            $sec_timeout = 60;
                  use LWP::UserAgent;
                  $ua = LWP::UserAgent->new();
             $ua->timeout($sec_timeout);
             $request = HTTP::Request->new('GET',$url);
               $img = "Image/$suchname";
              $ort = "$cgidir/$img";
              $response = $ua->request($request, $ort);
              if ($response->is_success) {
               chmod(0777,$ort);
               return $img;
              }
              else {
               print "Error: " . $response->code . " " . $response->message . " " . $url;
               return "0";
              }
           }

          Schätze, da gibt es nichts auszusetzen.
          Image::Size verursacht übrigens keinen Error im herkömmlichen Sinn (keine Fehlermeldung im Errorlogfile) sondern bricht einfach ab, wie bei einem exit.

          So long, noch einen schönen Sonntag,

          sunawa

          1. Tja, sunawa, ich kann auch nix erkennen.

            Aber nach der Zeile
            ($x_wert, $y_wert, $id_wert) = imgsize($img_name);
            würde ich einfügen:
            die 'Image::Size Error ' . $id_wert
                unless defined $x_wert;

            Denn (RTFM;) es steht geschrieben:
            imgsize(stream)
            Returns a three-item list of the X and Y dimensions (width and height, in that order)
            and image type of stream. Errors are noted by undefined (undef) values for the first
            two elements, and an error string in the third. The third element can be (and usually is)
            ignored, but is useful when sizing data whose type is unknown.

            ... uns außerdem ... wer sagt Dir, daß nach
             $img_name = &read_data;
            wirklich ein gültiger Name in $img_name steht?

            Wie wäre es also mit:
            die "cannot read image file $img_name"
                unless -r $img_name;

            .. und das ganze dann noch ergänzt um:
            die "empty $img_name"
                unless length($img_name);

            Das ganze nennt sich dann defensive Programmierung.
            .. und weniger Gottvertrauen, daß überall etwas Sinnvolles
            drin steht - don't trust anybody .. especially not yourself.

            Ob's Dein konkretes Problem löst weiß ich nicht,
            aber ich kann mir gut vorstellen, daß Du dadurch
            ein paar wertvolle Hinweise erhälst ;)
            Was steht eigentlich in $suchname?

            Grüße
               K@rl