cr: bildergröße auf max. ?? beschränken?

hallo,

ich habe einen bildupload auf meiner homepage.

da viele bilder aber enorme ausmaße haben können, wollte ich mittels php überprüfen lassen, wie groß dass bild ist und eine maximalgröße angeben

bsp:

bild ist 700x500 pixel

maximal erlaubt sind 350x350

also soll php den ersten wert auf 350 setzen und den 2ten wert prozentual mit verändern.

wie geht sowas? welche php codes nimmt man dafür?

danke für eure hilfe!

  1. Hallo cr.

    bild ist 700x500 pixel

    maximal erlaubt sind 350x350

    also soll php den ersten wert auf 350 setzen und den 2ten wert prozentual mit verändern.

    wie geht sowas? welche php codes nimmt man dafür?

    Im Idealfall ist ImageMagick auf dem Server installiert:

    $str_filename = 'foo.png';  
      
    exec('mogrify -resize 350x ' . $str_filename);
    

    Damit wird genau das von dir gewünschte Resultat erzielt.

    Ansonsten gäbe es zur Manipulation von Grafiken noch die GDLib-Funktionen.

    Einen schönen Sonntag noch.

    Gruß, Mathias

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    debian/rules
    1. hallo mathias,

      vielen dank!

      gibt es im php auch die möglichkeit beim upload des bildes eine kleine version zu speichern und eine in normalgröße. (zur bildvorschau)

      wenn dann ein user das bild sehen will, kann er ja draufklicken und in einem neuen fenster geht das große auf?

      das wäre noch eine alternative.

      (andere scriptsprachen sind auch mgl.)

      danke cr

      1. Hallo cr.

        gibt es im php auch die möglichkeit beim upload des bildes eine kleine version zu speichern und eine in normalgröße. (zur bildvorschau)

        Ja, wenn dein Script dies erledigt.

        Einen schönen Sonntag noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        debian/rules
        1. ah, ok.

          ist es in html möglich, die <img width=30% anzugeben?

          grüße

          cr

          1. Hallo cr.

            ist es in html möglich, die <img width=30% anzugeben?

            Es ist möglich, doch du solltest es nicht tun. Warum, steht in diesem Posting.

            Einen schönen Sonntag noch.

            Gruß, Mathias

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            debian/rules
            1. ok.

              aber warum macht der browser (ie6) alle bilder gleich groß?, obwohl die ausgangsgrößen nicht identisch waren und die größenangabe bei beiden 30% ist?

              danke für eure hilfe!

              cr

              1. Hallo cr.

                aber warum macht der browser (ie6) alle bilder gleich groß?, obwohl die ausgangsgrößen nicht identisch waren und die größenangabe bei beiden 30% ist?

                Weil damit alle Grafiken 30% der Breite ihres Elternelementes einnehmen.

                Works as designed.™

                Einen schönen Sonntag noch.

                Gruß, Mathias

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                debian/rules
          2. ist es in html möglich, die <img width=30% anzugeben?

            also nach einem test gibt er alle bilder in einer bestimmeten größe aus, aber das ist doch so kein richtiges html?

            die angabe lautet <img src='test.jpg' width='30%'>

            original bilder als beispiel sind

            640x480
            321x187

            ausgabe erfolgt immer zu

            192x112 pixel...

            hä?

            danke für eure hilfe dazu.

            der
            cr

          3. n'abend,

            ist es in html möglich, die <img width=30% anzugeben?

            natürlich ist es möglich dem Browser das Runterskalieren des Bildes zu überlassen. Sowas möchte man aber heutzutage nicht mehr machen. Je nach Browser kommen die Bilder mal schöner mal schlechter raus.

            Skaliere in deinem Script das Bild doch einfach 2 mal auf die gewünschten Proportionen.

            bspw.

            /*  
             * Proportionales Skalieren von Bildern mittels Imagemagick.  
             * Die Größenangaben sind maximum-werte.  
             */  
              
            exec('/usr/bin/convert -size 350x350 pfad/zum/bild.jpg -resize 350x350">" pfad/zum/vollbild.jpg');  
            exec('/usr/bin/convert -size 70x70 pfad/zum/bild.jpg -resize 70x70">" pfad/zum/vorschaubild.jpg');  
            
            

            Weitere Informationen zu resize mit Imagemagick findest du in der Imagemagick Dokumentation

            weiterhin schönen abend...

            --
            wer braucht schon großbuchstaben?
            sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
      2. Hey!

        gibt es im php auch die möglichkeit beim upload des bildes eine kleine version zu speichern und eine in normalgröße. (zur bildvorschau)

        wenn dann ein user das bild sehen will, kann er ja draufklicken und in einem neuen fenster geht das große auf?

        Ich weiß, manche Leute sehen es nicht gerne, wenn man ganze Scripts postet, aber das ist mir jetzt ziemlich egal. Möglicherweise hilft dir ja das weiter, musst du aber noch ziemlich anpassen denk ich. Das hier ist ein Script zu Erstellung von Thumbnails, wobei ich da die Parameter aus einer Datenbank auslese. Ein Bild sähe dann ungefähr so aus:

        <img src="thumbnail.php?ordner=<?=$ordner?>&bild=<?=$bild?>&max=150">

          
        <?  
        $ordner = $_GET['ordner'];  
        $bild = $_GET['bild'];  
        $max = $_GET['max'];  
          
        $fotopfad = "Fotos/$ordner";  
          
        // The file  
        $filename = "$fotopfad/$bild".".jpg";  
          
        if (file_exists($filename)){  
          
          
        // Content type  
        header('Content-type: image/jpeg');  
          
        // Get new dimensions  
        list($width, $height) = getimagesize($filename);  
          
        //if($width > $max || $height > $max){  
          
        if($width > $height){  
        $p = ($max * 100) / $width;  
        $factor = $p / 100;  
        $new_width = $width * $factor;  
        $new_height = $height * $factor;  
        }  
          
        elseif($height > $width || $height == $width){  
        $p = ($max * 100) / $height;  
        $factor = $p / 100;  
        $new_width = $width * $factor;  
        $new_height = $height * $factor;  
          }  
          
        // Resample  
        $image_p = imagecreatetruecolor($new_width, $new_height);  
        $image = imagecreatefromjpeg($filename);  
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);  
          
        // Interlacing  
        imageinterlace($image_p,1);  
          
        // Output  
        imagejpeg($image_p, null, 100);  
        /*  
        oder du schreibst hier eben statt null einen Dateinamen hin, wie das neue Bild heißen soll. Das ganze Script würde dann nach den Bildupload kommen, also nach move_uploaded_file();  
        */  
          
          }//if (file_exists($filename))-Schliessung  
        ?>  
        
        

        Ich hoffe ich konnte dir hiermit einen kleinen Ansatz geben. Ich selbst verwende  dieses selbstgeschriebene Script eben zur Thumnailerstellung, daher auch das imageinterlace...

        Hendrik

        --
        -------------------
        Zur Info: Ich habe leider nur PHP 4.4.2 und MySQL 4.1.20 zur Verfügung!
        -------------------
        ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
        SELFCode Decoder