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

  • den
    hat ein Thema erstellt Formel für Bildverkleinderung.

    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!

  • den
    antwortet
    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!

    Einen Kommentar schreiben:


  • Chriz
    antwortet
    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

    Einen Kommentar schreiben:


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

    [MOD: Trash]

    Einen Kommentar schreiben:

Lädt...
X