Hendrik: Gleichungen mit PHP?

Hey!

Ich habe eine etwas komplizierte Frage: Ich möchte ein auf meinem Server hochgeladenes Bild dynamisch skalieren, so dass die größere Größe (Breite oder Höhe) immer auf 150 Pixel und die kleinere Größe dem entsprechend skaliert wird.
Beispiel:
Wenn ich also ein Bild mit 200x300 Pixel habe, soll es dann auf 150x225 Pixel skaliert werden!

Wie kann ich das machen?

Um die Höhe und Breite des Bildes auszulesen, habe ich folgende Funktion geschrieben:

  
function getFileSizeW($datei_name){  
$blah = getimagesize($datei_name);  
$type = $blah['mime'];  
$width = $blah[0];  
return $width;  
}  
  
function getFileSizeH($datei_name){  
$blah = getimagesize($datei_name);  
$type = $blah['mime'];  
$height = $blah[1];  
return $height;  
}  
  
$sizeW = getFileSizeW($datei_name);  
$sizeH = getFileSizeH($datei_name);  

  1. Hallo,

    Ich habe eine etwas komplizierte Frage: Ich möchte ein auf meinem Server hochgeladenes Bild dynamisch skalieren, so dass die größere Größe (Breite oder Höhe) immer auf 150 Pixel und die kleinere Größe dem entsprechend skaliert wird.
    Beispiel:
    Wenn ich also ein Bild mit 200x300 Pixel habe, soll es dann auf 150x225 Pixel skaliert werden!

    Die größere Größe, in diesem Fall also 300px, werden zu 150px (Quotient 2), dann würden die 200px doch zu 100px (ebenfalls Quotient 2) werden, oder nicht?

    Beste Grüße

    1. Die größere Größe, in diesem Fall also 300px, werden zu 150px (Quotient 2), dann würden die 200px doch zu 100px (ebenfalls Quotient 2) werden, oder nicht?

      Beste Grüße

      Du hast natürlich Recht! Ich hab das mit der größeren Größe nicht mehr beachtet...

  2. Hey!

    Ich habe eine etwas komplizierte Frage: Ich möchte ein auf meinem Server hochgeladenes Bild dynamisch skalieren, so dass die größere Größe (Breite oder Höhe) immer auf 150 Pixel und die kleinere Größe dem entsprechend skaliert wird.
    Beispiel:
    Wenn ich also ein Bild mit 200x300 Pixel habe, soll es dann auf 150x225 Pixel skaliert werden!

    Wie kann ich das machen?

    Um die Höhe und Breite des Bildes auszulesen, habe ich folgende Funktion geschrieben:

    function getFileSizeW($datei_name){
    $blah = getimagesize($datei_name);
    $type = $blah['mime'];
    $width = $blah[0];
    return $width;
    }

    function getFileSizeH($datei_name){
    $blah = getimagesize($datei_name);
    $type = $blah['mime'];
    $height = $blah[1];
    return $height;
    }

    $sizeW = getFileSizeW($datei_name);
    $sizeH = getFileSizeH($datei_name);

      
    if ($sizeW > $sizeH) {  
     $factor = $sizeW / 150;  
     $newwitdth = 150;  
     $newheight = sizeH / $factor;  
    }  
    else {  
     $factor = $sizeH / 150;  
     $newheight = 150;  
     $newwidth = sizeW / $factor;  
    }  
      
    Müsste in der Hauptschule dran gewesen sein...  
    (Sorry, konnte ich mir aber bei der "komplizierten" Frage nicht verkneifen),  
    
    
    1. Hallo!

      if ($sizeW > $sizeH) {
      $factor = $sizeW / 150;
      $newwitdth = 150;
      $newheight = sizeH / $factor;
      }
      else {
      $factor = $sizeH / 150;
      $newheight = 150;
      $newwidth = sizeW / $factor;
      }

      Müsste in der Hauptschule dran gewesen sein...
      (Sorry, konnte ich mir aber bei der "komplizierten" Frage nicht verkneifen),

      Danke für das Kompliment. Ich habe das Script mal probiert, und die Werte einfach mit echo ausgegeben, aber leider kommt bei der Größeren Größe (richtiger Weise) 150 raus, bei der kleineren jedoch immer 0! Wieso?

      Hendrik

      1. Hallo Hendrik,

        Danke für das Kompliment. Ich habe das Script mal probiert, und die Werte einfach mit echo ausgegeben, aber leider kommt bei der Größeren Größe (richtiger Weise) 150 raus, bei der kleineren jedoch immer 0! Wieso?

        Weil da einfach zu wenig Geld im Spiel ist. Ein paar Dollar an den richtigen Stellen investiert wirken Wunder ...  ;-)

        $newheight = sizeH / $factor;

        [...]

        $newwidth = sizeW / $factor;

        Fällt dir was auf?

        Schönen Abend noch,
         Martin

        --
        Ich wollt', ich wär ein Teppich. Dann könnte ich morgens liegenbleiben.
        1. echo $begrüßung;

          Weil da einfach zu wenig Geld im Spiel ist. Ein paar Dollar an den richtigen Stellen investiert wirken Wunder ...  ;-)

          $newheight = sizeH / $factor;
          Fällt dir was auf?

          Solche Sachen fallen einem viel leichter auf, wenn man PHP das Auswerfen von Hinweismeldungen gestattet, indem man das error_reporting auf E_ALL stellt.

          echo "$verabschiedung $name";

  3. Hallo

    Ich habe eine etwas komplizierte Frage: Ich möchte ein auf meinem Server hochgeladenes Bild dynamisch skalieren, so dass die größere Größe (Breite oder Höhe) immer auf 150 Pixel und die kleinere Größe dem entsprechend skaliert wird.

    Wenn ich also ein Bild mit 200x300 Pixel habe, soll es dann auf 150x225 Pixel skaliert werden!

    Um die Höhe und Breite des Bildes auszulesen, habe ich folgende Funktion geschrieben:

    function getFileSizeW($datei_name){
    $blah = getimagesize($datei_name);
    $type = $blah['mime'];
    $width = $blah[0];
    return $width;
    }

      
    Warum erfragst du den Typ, wenn du diese Info garnicht verwendest? Außerdem gibt dir getimageinfo alle Informationen, die du brauchst, mit einem mal. Du brauchst nicht mehrere Funktionen.  
      
    ~~~php
      
    $blah = getimagesize($datei_name);  
    /*  
    $blah[0]=Breite  
    $blah[1]=Hoehe  
    $blah[2]=Typ  
    $blah[3]=Zeichenkette zur Verwendung im IMG-Tag von HTML.  
    */  
    
    

    Soviel dazu.

    Die Gleichung funktioniert genauso, wie im realen Leben. Stelle zuerst fest, welche die längere Seite ist ($blah[0] oder $blah[1]). Diese Seite soll, laut deinen obigen Angaben, 150px lang werden. Stelle mittels des Dreisatzes fest, wieviel Prozent 150 Pixel von der gegebenen Länge sind. Bei einer gegebenen größeren Seite von 300px sind dies 50%.

    Diese Prozentwert ist der Faktor, um den du nun beide Seiten skalieren musst. 50% entspricht dem Faktor 0.5. Teile also den ermittelten Prozentwert durch 100, multipliziere beide Seitenlängen mit diesem Wert (hier 0.5) und berechne mit den ermittelten neuen Seitenlängen das Bild neu.

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. Hi @ all,

      Ansonsten habe ich ein kleines Scriptchen irgendwo noch, falls du keine Lust zu studieren hast ;-)

      Mir hat es schon viele Male das Leben gerettet :-D

      Brauchst nur nachzufragen.

      Mit freundlichen Grüssen,
      Pot

    2. Hallo!

      Die Gleichung funktioniert genauso, wie im realen Leben. Stelle zuerst fest, welche die längere Seite ist ($blah[0] oder $blah[1]). Diese Seite soll, laut deinen obigen Angaben, 150px lang werden. Stelle mittels des Dreisatzes fest, wieviel Prozent 150 Pixel von der gegebenen Länge sind. Bei einer gegebenen größeren Seite von 300px sind dies 50%.

      Diese Prozentwert ist der Faktor, um den du nun beide Seiten skalieren musst. 50% entspricht dem Faktor 0.5. Teile also den ermittelten Prozentwert durch 100, multipliziere beide Seitenlängen mit diesem Wert (hier 0.5) und berechne mit den ermittelten neuen Seitenlängen das Bild neu.

      Super, danke! Ich habe aus deinen Infos (die ich auch selbst durch Nachdenken hätte bekommen können) folgendes Script gemacht (alles funktionniert wunderbar):

        
      if($sizeW > $sizeH){  
      $p = (150 * 100) / $sizeW;  
      $factor = $p / 100;  
      $width_skal = $sizeW * $factor;  
      $height_skal = $sizeH * $factor;  
      }  
        
      elseif($sizeH > $sizeW){  
      $p = (150 * 100) / $sizeH;  
      $factor = $p / 100;  
      $width_skal = $sizeW * $factor;  
      $height_skal = $sizeH * $factor;  
      }  
      
      

      Eigentlich ganz einfach! Danke!

      Hendrik

      1. Hallo,

        (alles funktionniert wunderbar):

        if($sizeW > $sizeH){
        $p = (150 * 100) / $sizeW;
        $factor = $p / 100;
        $width_skal = $sizeW * $factor;
        $height_skal = $sizeH * $factor;
        }

        elseif($sizeH > $sizeW){
        $p = (150 * 100) / $sizeH;
        $factor = $p / 100;
        $width_skal = $sizeW * $factor;
        $height_skal = $sizeH * $factor;
        }

          
        Was passiert bei quadratischen Bildern, also wenn $sizeW == $sizeH ist? Gilt dann auch noch "alles funktionniert wunderbar"?  
          
        viele Grüße  
          
        Axel
        
        1. Hallo!

          Was passiert bei quadratischen Bildern, also wenn $sizeW == $sizeH ist? Gilt dann auch noch "alles funktionniert wunderbar"?

          Nicht ganz! Dann wird es wohl gar nicht skaliert...
          Ja, ich weiß! Das Script war wohl doch noch nicht so super.

          Also fürs Archiv auch noch mal zum Mitschreiben:

            
          <?  
          function getFileSizeW($datei_name){  
          $blah = getimagesize($datei_name);  
          $type = $blah['mime'];  
          $width = $blah[0];  
          return $width;  
          }  
            
          function getFileSizeH($datei_name){  
          $blah = getimagesize($datei_name);  
          $type = $blah['mime'];  
          $height = $blah[1];  
          return $height;  
          }  
            
          $sizeW = getFileSizeW($datei_name);  
          $sizeH = getFileSizeH($datei_name);  
            
          $max = 200;  
            
          if($sizeW > $max || $sizeH > $max){  
            
          if($sizeW > $sizeH){  
          $p = ($max * 100) / $sizeW;  
          $factor = $p / 100;  
          $width_skal = $sizeW * $factor;  
          $height_skal = $sizeH * $factor;  
          }  
            
          elseif($sizeH > $sizeW || $sizeH == $sizeW){  
          $p = ($max * 100) / $sizeH;  
          $factor = $p / 100;  
          $width_skal = $sizeW * $factor;  
          $height_skal = $sizeH * $factor;  
          }  
           }//if($sizeW > $sizeH)-Schließung  
          
          

          So, ich habe einfach noch mal eine Abfrage reingepackt, ob eine der beiden Seiten überhaupt die maximale Seitengröße übersteigt. Falls dies nicht so ist, muss das Bild ja nicht unnötig verzerrt werden!

          Ich hoffe jetzt habe ich alles beachtet?!

          Hendrik

          1. Hallo,

            Also fürs Archiv auch noch mal zum Mitschreiben:

            <?
            function getFileSizeW($datei_name){
            $blah = getimagesize($datei_name);
            $type = $blah['mime'];
            $width = $blah[0];
            return $width;
            }

            function getFileSizeH($datei_name){
            $blah = getimagesize($datei_name);
            $type = $blah['mime'];
            $height = $blah[1];
            return $height;
            }

            $sizeW = getFileSizeW($datei_name);
            $sizeH = getFileSizeH($datei_name);

            Hierzu hat Auge schon etwas geschrieben. Deine Funktionen getFileSizeW($datei_name) und getFileSizeH($datei_name) bieten keine Erweiterung oder Ergänzung zu getimagesize($datei_name).

            if($sizeW > $sizeH){

            ...

            }
            elseif($sizeH > $sizeW || $sizeH == $sizeW){

            ...

            }

            Dein elseif ist einfach else. Wenn $sizeW nicht größer als $sizeH ist, _kann_ es nur noch kleiner oder gleich sein.

            viele Grüße

            Axel