Seitenverhältnis-Rechner
Kürzt jedes Breiten-Höhen-Verhältnis auf die einfachste Form und rechnet die fehlende Seite aus, wenn das Verhältnis erhalten bleiben soll.
Ein Bild soll 800 Pixel breit werden — wie hoch muss es dann sein, damit nichts verzerrt? Und in welchem Verhältnis steht eigentlich ein Foto mit 4032 × 3024 Pixeln? Beide Fragen beantwortet dieses Script.
Oben tragt ihr die Ausgangsmaße ein und bekommt das gekürzte Verhältnis — aus 4032 × 3024 wird 4:3, aus 1920 × 1080 wird 16:9. Darunter rechnet ihr in die andere Richtung: Ihr gebt ein Verhältnis und eine der beiden Seiten vor, und die andere wird ergänzt. Für die gängigen Formate gibt es Schalter.
Ein paar Verhältnisse, die man kennen sollte: 16:9 ist der Standard für Bildschirme und Videos. 4:3 war es bis in die 2000er Jahre und ist bei Fotos aus Kompaktkameras und Telefonen bis heute üblich. 3:2 stammt vom Kleinbildfilm und gilt bei Spiegelreflex- und Systemkameras. 21:9 ist das Kinoformat, genauer 64:27. 1:1, das Quadrat, kam mit den sozialen Netzwerken zurück. Und die Formate der Papierreihe DIN A haben das Verhältnis 1 zu Wurzel 2 — deshalb ergibt das Halbieren eines A4-Blattes wieder dasselbe Format, nämlich A5.
Verwandtes im Archiv: Größter gemeinsamer Teiler ist die Rechnung hinter dem Kürzen, Dreisatz die hinter dem Ergänzen, und Browserinformationen zeigt euch die Maße eures eigenen Bildschirms.
So funktioniert das Script
Beide Richtungen beruhen auf einer Rechnung aus der Schule: das Kürzen eines Bruchs und der Dreisatz. Interessant ist, wie man den Kürzungsfaktor findet.
function ggt(a, b) {
while (b !== 0) {
const rest = a % b;
a = b;
b = rest;
}
return a;
}
Das ist der euklidische Algorithmus, rund 2300 Jahre alt und immer noch das beste Verfahren für diese Aufgabe. Die Idee: Der größte gemeinsame Teiler zweier Zahlen ist derselbe wie der der kleineren Zahl und des Restes. Also teilt man wiederholt und rückt weiter, bis der Rest null ist — dann steht der Teiler da.
Für 1920 und 1080 läuft das so: 1920 geteilt durch 1080 lässt den Rest 840; 1080 durch 840 lässt 240; 840 durch 240 lässt 120; 240 durch 120 lässt 0. Der größte gemeinsame Teiler ist also 120, und 1920 : 120 = 16, 1080 : 120 = 9 — daher 16:9. Vier Schritte für Zahlen dieser Größe; ein naives Durchprobieren aller Teiler bräuchte über tausend.
const breite = seite === "breite" ? wert : wert * x / y;
const hoehe = seite === "breite" ? wert * y / x : wert;
Das Ergänzen ist ein Dreisatz: Verhält sich die Breite zur Höhe wie 16 zu 9, dann ist die Höhe gleich Breite mal 9 geteilt durch 16. Beide Zeilen decken beide Richtungen ab, je nachdem welche Seite bekannt ist. Bei 800 Pixeln Breite im Format 16:9 ergibt das 450 Pixel Höhe.
if (x > 20 || y > 20) { … }
Nicht jedes Verhältnis kürzt sich schön. 1366 × 768 — eine früher verbreitete Bildschirmauflösung — ergibt gekürzt 683:384, was niemandem etwas sagt. In solchen Fällen sucht das Script das nächstgelegene gängige Format und nennt es dazu; hier wäre das 16:9, von dem die Auflösung nur um ein Zwanzigstel Prozent abweicht.
if (Math.abs(eintrag.wert - dezimal) < Math.abs(naechstes.wert - dezimal)) {
naechstes = eintrag;
}
Gesucht wird der kleinste Abstand, und weil die Abweichung nach oben wie nach unten gehen kann, wird mit Math.abs der Betrag genommen. Das ist dasselbe „finde das Beste"-Muster wie bei der Häufigkeitsanalyse: ein Merker, der Schritt für Schritt verbessert wird.
{ name: "DIN A", wert: Math.SQRT2 }
Das Papierformat DIN A ist der einzige Eintrag mit einem irrationalen Verhältnis — es lässt sich nicht als Bruch ganzer Zahlen schreiben. Genau das ist seine Besonderheit: Nur beim Verhältnis 1 zu Wurzel 2 bleibt beim Halbieren das Format erhalten, denn die halbierte lange Seite verhält sich zur kurzen wieder wie 1 zu Wurzel 2. Math.SQRT2 ist die eingebaute Konstante dafür.
Zum Anpassen: Für das Verkleinern eines Bildes auf eine Höchstgröße bei erhaltenem Verhältnis rechnet ihr beide Seiten mit demselben Faktor — dem kleineren der beiden Verhältnisse aus Zielmaß und Ausgangsmaß. Und wenn ihr Zentimeter statt Pixel braucht, ändert sich an der Rechnung nichts; nur die Rundung auf ganze Zahlen sollte dann weg.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Verschiedenes
-
Auf Seite suchen
-
Benzinverbrauch
-
BMI berechnen
-
Browserinformationen
-
Caps Lock Text korrigieren
-
Cookietest
-
CPU-Test
-
Eieruhr
-
Erdbeben
-
Farbverlauf
-
Gruppen einteilen
-
Handyrechner
-
IBAN prüfen
-
ISBN-Prüfziffer
-
Javascript Shell
-
Kontrast prüfen
-
Losentscheid
-
Lottozahlen Generator
-
Mauskoordinaten
-
Mehrwertsteuer-Rechner
-
Metronom
-
Notenrechner
-
Passwortgenerator
-
Periodensystem
-
Popup-Generator
-
RGB-Slider
-
Tabellengenerator
-
Tastencodes anzeigen
-
To Do List