Ankündigung

Einklappen
Keine Ankündigung bisher.

Formel für Bildverkleinderung

Einklappen

Neue Werbung 2019

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

  • Formel für Bildverkleinderung

    Hallo

    Ich habe folgende Aufgabe wo ich nichts dazu finde und nicht hin bekommen:

    - Gegeben sind diverse Bilder in verschiedenen Grössen.
    - Diese sollen verkleinert werden das sie sowohl eine maximale Höhe als auch eine maximale Breite nicht überschreiten.
    - Kleiner dürfen sie werden
    - Sie sollen aber so gross wie möglich sein
    - und es soll proportional verkleinert werden.

    Kennt dazu jemand eine Formel? Ich nehme an, es gibt eine die ohne ausprobieren in einer Schleife funktioniert.

    Das eigentliche verkleinern der Bilder funktioniert schon. Nur mit dem Ausrechnen der Zielgrösse haperts...

    Danke für jede Hilfe!


  • #2
    Das Thema wurde bereits hinreichend behandelt. Bitte benutze die Forensuche und beachte diesen Thread!

    [MOD: Trash]
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Ich erlaub mir mal wieder aufzumachen, weil ich gern auf die Frage antworte. Auch wenn sie sicherlich schon - wie nikosch gepostet hat - zu Hauf beantwortet wurde.

      Diese sollen verkleinert werden das sie sowohl eine maximale Höhe als auch eine maximale Breite nicht überschreiten.
      Was meinst du jetzt?

      Ich nehme mal an du möchtest Bilder einfach verkleinern, innen aber eine maximale "Bounding Box" zuweisen. Sprich so dass niemand deine Bilder auf 100.000 x 100.000 vergrößern kann.

      Du musst eigentlich nur den Faktor der Verkleinerung errechnen und ihn entsprechend (wegen der Proportionen) dann auf beide Seiten (Höhe/Breite) anrechnen.

      Beispiel:
      Code:
      // vorgabe:
      
      $original_breite = 400;
      $original_hoehe = 300;
      
      $max_size = 60;
      $soll_hoehe = 50
      
      // rechnung:
      
      $soll_hoehe = min($max_size, $soll_hoehe); // sicherstellen, dass unsere Angabe dem $max_size entspricht
      
      $factor = $soll_hoehe / $original_hoehe; // 50/300 => 1/6 => 0,166...
      $soll_breite = $factor * $original_breite; // 1/6 * 400 => 66,66...
      $soll_breite = round($soll_breite); // 67
      
      if ($soll_breite > $max_size) {
        $soll_breite = $max_size;
        $factor = $soll_breite / $original_breite; // 60/400 => 0,15
        $soll_hoehe = $factor * $original_hoehe; // 0,15 * 300 => 45
      }
      
      print($soll_breite . "x" . $soll_hoehe); // 60x45
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Zitat von Chriz Beitrag anzeigen
        Ich erlaub mir mal wieder aufzumachen, weil ich gern auf die Frage antworte. Auch wenn sie sicherlich schon - wie nikosch gepostet hat - zu Hauf beantwortet wurde.
        Ja, man findet haufenweise Diskussionen über dieses Thema. Allerdings habe ich nichts gefunden was meine Frage beantwortet hat, da meistens nur entweder die Höhe oder die Breite berücksichtigt wurde oder dann einfach um z.b 50% verkleinert wird. Oder ich hab einfach falsch gesucht...


        Zitat von Chriz Beitrag anzeigen
        Was meinst du jetzt?

        Ich nehme mal an du möchtest Bilder einfach verkleinern, innen aber eine maximale "Bounding Box" zuweisen. Sprich so dass niemand deine Bilder auf 100.000 x 100.000 vergrößern kann.
        So ungefähr. Dein Beispiel funktioniert nach leichten Anpassungen für mich ganz gut (und du hast mein "Knopf" den ich bei der Formel hatte gelöst, Danke!):

        Zitat von Chriz Beitrag anzeigen
        $soll_hoehe = min($max_size, $soll_hoehe); // sicherstellen, dass unsere Angabe dem $max_size entspricht
        Wofür ist diese Zeile genau gedacht? Den als ich sie entfernt habe, hat es auch für Werte wie unten funktioniert:

        PHP-Code:
        // vorgabe:

        $original_breite 300;
        $original_hoehe 400;

        $max_breite 100;
        $max_hoehe 300;

        // rechnung:

        #$soll_hoehe = min($max_breite, $max_hoehe); // sicherstellen, dass unsere Angabe dem $max_size entspricht

        $soll_hoehe $max_hoehe;
        $factor $soll_hoehe $original_hoehe// 50/300 => 1/6 => 0,166...
        $soll_breite $factor $original_breite// 1/6 * 400 => 66,66...
        $soll_breite round($soll_breite); // 67

        if ($soll_breite $max_breite) {
          
        $soll_breite $max_breite;
          
        $factor $soll_breite $original_breite// 60/400 => 0,15
          
        $soll_hoehe $factor $original_hoehe// 0,15 * 300 => 45
        }

        $soll_hoehe round($soll_hoehe);

        print(
        $soll_breite "x" $soll_hoehe."\n\n"); // 60x45 
        Die Variabeln habe ich teilweise umbenannt so das sie für mich mehr Sinn ergaben. Ausserdem habe ich die $soll_hoehe am Schluss noch gerundet. Dann gibt es korrekt 100x133 und nicht 75x100 aus -> Sprich es funktioniert auch wenn maximale Höhe grösser ist als die maximale Breite ist.

        Vielen Dank für deine Hilfe!

        Kommentar

        Lädt...
        X