Ankündigung

Einklappen
Keine Ankündigung bisher.

while schleife mit mehreren bedingungen ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • while schleife mit mehreren bedingungen ?

    Moin,

    ist sowas möglich ?

    PHP-Code:
    while($a 110 && $b 80){
      
    $a $a 10;
      
    $b $b 10;

    aus dem tutorial geht nichts hervor,
    er gibt keinen fehler aus, aber es
    scheint nicht zu funktionieren, da
    ich manchmal abbrüche mit z.b. 100
    und 120 habe ???

  • #2
    Warum sollte das nicht gehen? Kommt eben darauf an, mit welchen Initialwerten du mit $a und $b in die Schleife kommst.

    Kommentar


    • #3
      Moin,

      es geht im allgemeinem um ne bildverkleinerung (thumbnails).

      Meine funktion sieht so aus:

      PHP-Code:
      <?php

      function thumbnail($sourceimg){
        
      $bilddaten getimagesize($sourceimg);
        
      $bild_b $bilddaten[0];
        
      $bild_h $bilddaten[1];

        
      $new_h $bild_h;
        
      $new_b $bild_b;

        
      $factor $new_h $new_b;

        
      // max höhe = 80 / max breite = 120

        
      while($new_h 80 && $new_b 120){
          if(
      $factor >= 1){  // Querformat
            
      $new_h $new_h 10;
            
      $new_b $new_b - (10 $factor);
          } else {            
      // Hochformat
            
      $new_h $new_h - (10 $factor);
            
      $new_b $new_b 10;
          }
        }

        
      $oldimg ImageCreateFromJPEG($sourceimg);
        
      $newimg Imagecreatetruecolor($new_b$new_h);
        
      ImageCopyResized($newimg$oldimg0000$new_b$new_h$bild_b$bild_h);
        
      ImageJPEG($newimg"bilder/thumbs/".basename($sourceimg));
      }

      ?>
      funktioniert soweit auch ganz gut, nur wie gesagt es kommen auch bilder
      raus die höher als 80 oder breiter als 120 sind ... ? aber warum.

      Kommentar


      • #4
        Eventuell kanns daran liegen, dass du Hochformat und Querformat verwechselst. Beim Hochformat
        ist die Höhe größer als die Breite, ergo ist die Höhe geteilt durch die Breite > 1. Jetzt haste allerdings angegeben,
        dass die bei einem Faktor größer 1 das Querformat behandelt werden soll.

        Zudem ist noch nen Denkfehler drin: Wenn du Höhe durch Breite teilst, bekommst du das Verhältnis der
        Höhe in Bezug zu der Breite. Beim if-Block legst du aber den Faktor an die Breite an, was dann .. irgendwas,
        aber sicher nicht das Richtige sein wird

        PHP-Code:
        while($new_h 80 && $new_b 120){
          
        $new_h $new_h - (10 $factor);
          
        $new_b $new_b 10;

        Versuchs ma, ist ma nen ungetesteter Gedankengang

        Kommentar


        • #5
          hmm, hast recht, wär zu schön um wahr zu sein

          aber sagmal, wie könnte ich das lösen fällt dir da was ein ?

          wenn ich nicht weiss ob ich nen hoch oder querformat habe,
          und hoch darf es maximal 80 und breit maximal 120 sein,
          ...

          ich überleg nochmal.

          Kommentar


          • #6
            Ich hab dir eine Möglichkeit genannt, die allerdings auch falsch sein kann. Allerdings denk ich, dass es auch per Formel geht, die dann zudem effizienter sein müsste. Ich denk grad ma drüber nach

            PHP-Code:
            if ($new_h 80) { // Höhe überschritten?
              
            $factor $new_h 80;
              
            $new_h $new_h $factor;
              
            $new_b $nw_b $factor;
            }
            if (
            $new_b 120) { // Breite überschritten
              
            $factor $new_b 120;
              
            $new_h $new_h $factor;
              
            $new_b $nw_b $factor;

            Oberflächliche Tests verliefen erfolgreich. Die Idee ist: Berechne, falls nötig, um wieviel das Bild zu groß ist. Danach berechne um wieviel das Bild (eventuell jetzt immer noch) zu breit ist.

            Kommentar


            • #7
              Deins hatte bei mir teilweise - werte ergeben...

              ich habs jetzt so gemacht:

              PHP-Code:
              <?php

              function thumbnail($sourceimg){
                
              $bilddaten getimagesize($sourceimg);
                
              $bild_b $bilddaten[0];
                
              $bild_h $bilddaten[1];

                
              $new_h $bild_h;
                
              $new_b $bild_b;
               
                
              $part_h $new_h 100;
                
              $part_b $new_b 100;

                while(
              $new_h 80 || $new_b 110){
                  
              $new_h -= $part_h;
                  
              $new_b -= $part_b
                }

                
              $new_h round($new_h0);
                
              $new_b round($new_b0);

                
              $oldimg ImageCreateFromJPEG($sourceimg);
                
              $newimg Imagecreatetruecolor($new_b$new_h);
                
              ImageCopyResized($newimg$oldimg0000$new_b$new_h$bild_b$bild_h);
                
              ImageJPEG($newimg"bilder/thumbs/".basename($sourceimg));
              }

              ?>
              durch die 100er teilung braucht er jetzt geringfügig länger, ist aber nur für
              maximal 4 bilder, also gehts noch =)

              danke auf jedenfall für deine hilfe
              und die denkanstösse

              Kommentar


              • #8
                Meins kann keine negativen Werte annehmen (falls das so zu verstehen ist), da ich eine positive Zahl durch eine positive Zahl Teil und das Ergebniss mit einer positiven Zahl multipliziere... Gemäß bei uns in Berlin gängigen Rechengesetzen sollte das eine positive Zahl als Ergebniss haben

                Kommentar


                • #9
                  dann hat sich bei dem script bei mir wohl ein fehler eingeschlichen oder wir haben grad die mathematik revolutioniert

                  mein tip: a

                  Kommentar

                  Lädt...
                  X