Ich habe vor, es mit JavaScript zu verwenden, um ein Bild so zuzuschneiden, dass es in das gesamte Fenster passt.
Bearbeiten : Ich verwende eine Komponente eines Drittanbieters, die nur das Seitenverhältnis im Format wie : 4:3
, akzeptiert 16:9
.
javascript
algorithm
crop
aspect-ratio
Nathan
quelle
quelle
Antworten:
Ich nehme an, Sie suchen eher nach einer brauchbaren
integer:integer
Lösung mit Seitenverhältnis16:9
als nach einerfloat:1
Lösung wie1.77778:1
.Wenn ja, müssen Sie den größten gemeinsamen Teiler (GCD) finden und beide Werte dadurch dividieren. Die GCD ist die höchste Zahl, die beide Zahlen gleichmäßig teilt. Die GCD für 6 und 10 ist also 2, die GCD für 44 und 99 ist 11.
Ein 1024x768-Monitor hat beispielsweise eine GCD von 256. Wenn Sie beide Werte durch diese dividieren, erhalten Sie 4x3 oder 4: 3.
Ein (rekursiver) GCD-Algorithmus:
In C:
Und hier ist ein vollständiges HTML / Javascript, das eine Möglichkeit zeigt, die Bildschirmgröße zu ermitteln und das Seitenverhältnis daraus zu berechnen. Dies funktioniert in FF3. Ich bin mir nicht sicher, welche Unterstützung andere Browser für
screen.width
und habenscreen.height
.Es gibt aus (auf meinem seltsamen Breitbildmonitor):
Andere, an denen ich das getestet habe:
Ich wünschte, ich hätte den letzten zu Hause, aber nein, es ist leider eine Arbeitsmaschine.
Was Sie tun, wenn Sie herausfinden, dass das Seitenverhältnis von Ihrem Grafikgrößestool nicht unterstützt wird, ist eine andere Sache. Ich vermute, die beste Wahl wäre es, Letterboxing-Zeilen hinzuzufügen (wie die, die Sie oben und unten auf Ihrem alten Fernseher erhalten, wenn Sie einen Breitbildfilm darauf ansehen). Ich würde sie oben / unten oder an den Seiten hinzufügen (je nachdem, was die geringste Anzahl von Briefkastenzeilen ergibt), bis das Bild den Anforderungen entspricht.
Eine Sache, die Sie vielleicht berücksichtigen möchten, ist die Qualität eines Bildes, das von 16: 9 auf 5: 4 geändert wurde. Ich erinnere mich noch an die unglaublich großen, dünnen Cowboys, die ich in meiner Jugend im Fernsehen gesehen habe, bevor das Briefboxen eingeführt wurde. Möglicherweise ist es besser, ein anderes Bild pro Seitenverhältnis zu haben und einfach die richtige Größe für die tatsächlichen Bildschirmabmessungen zu ändern, bevor Sie es über das Kabel senden.
quelle
728x90
->364:45
bin nicht sicher, ob das das gewünschte Ergebnis istwenn es das ist, wonach du suchst. Sie können es dann mit einer der Dimensionen des Zielraums multiplizieren, um die andere herauszufinden (die das Verhältnis beibehält), z
quelle
Die Antwort von paxdiablo ist großartig, aber es gibt viele gängige Auflösungen, die nur wenige mehr oder weniger Pixel in einer bestimmten Richtung haben, und der größte gemeinsame Divisor-Ansatz liefert ihnen schreckliche Ergebnisse.
Nehmen wir zum Beispiel die gut erzogene Auflösung von 1360 x 765, die mit dem GCD-Ansatz ein gutes Verhältnis von 16: 9 ergibt. Laut Steam wird diese Auflösung nur von 0,01% der Benutzer verwendet, während 1366 x 768 von 18,9% verwendet wird. Mal sehen, was wir mit dem gcd-Ansatz bekommen:
Wir möchten dieses Verhältnis von 683: 384 auf das nächste Verhältnis von 16: 9 aufrunden.
Ich habe ein Python-Skript geschrieben, das eine Textdatei mit eingefügten Zahlen von der Steam Hardware-Umfrageseite analysiert und alle Auflösungen und nächsten bekannten Verhältnisse sowie die Häufigkeit der einzelnen Verhältnisse druckt (was mein Ziel war, als ich damit anfing):
Für Neugierige ist dies die Prävalenz der Bildschirmverhältnisse bei Steam-Nutzern (Stand Oktober 2012):
quelle
Ich denke, Sie möchten entscheiden, welches von 4: 3 und 16: 9 am besten passt.
quelle
Hier ist eine Version von James Fareys bestem Algorithmus für rationale Approximation mit einstellbarem Grad an Unschärfe, der aus dem ursprünglich in Python geschriebenen Berechnungscode für das Seitenverhältnis auf Javascript portiert wurde .
Die Methode verwendet ein float (
width/height
) und eine Obergrenze für den Bruchzähler / Nenner.Im folgenden Beispiel setze ich eine Obergrenze von,
50
weil ich1035x582
(1.77835051546) als16:9
(1.77777777778) behandeln muss, anstatt345:194
mit demgcd
in anderen Antworten aufgeführten einfachen Algorithmus.quelle
Nur für den Fall, dass Sie ein Performance-Freak sind ...
Der schnellste Weg (in JavaScript), um ein Rechteckverhältnis zu berechnen, ist die Verwendung eines echten binären Great Common Divisor-Algorithmus.
(Alle Geschwindigkeits- und Timing-Tests wurden von anderen durchgeführt. Sie können einen Benchmark hier überprüfen: https://lemire.me/blog/2013/12/26/fastest-way-to-compute-the-greatest-common-divisor / )
Hier ist es:
quelle
Hier ist meine Lösung, es ist ziemlich einfach, da alles, was mich interessiert, nicht unbedingt GCD oder sogar genaue Verhältnisse sind: denn dann bekommt man seltsame Dinge wie 345/113, die für den Menschen nicht verständlich sind.
Grundsätzlich setze ich akzeptable Landschafts- oder Hochformatverhältnisse und deren "Wert" als Float ... Ich vergleiche dann meine Float-Version des Verhältnisses mit jedem und wer jemals die niedrigste absolute Wertdifferenz aufweist, ist das Verhältnis, das dem Objekt am nächsten liegt. Auf diese Weise zählt es immer noch als 16: 9, wenn der Benutzer es 16: 9 macht, dann aber 10 Pixel von der Unterseite entfernt ...
quelle
Ich glaube, dass das Seitenverhältnis die Breite geteilt durch die Höhe ist.
quelle
Ich denke, das macht das, wonach Sie fragen:
webdeveloper.com - dezimal zum Bruch
Mit Breite / Höhe erhalten Sie eine Dezimalstelle, die in einen Bruch mit ":" anstelle von "/" umgewandelt wird. Sie erhalten ein "Verhältnis".
quelle
Dieser Algorithmus in Python bringt Sie auf dem Weg dorthin.
Sag mir, was passiert, wenn die Fenster eine lustige Größe haben.
Vielleicht sollten Sie eine Liste aller akzeptablen Verhältnisse (zur Komponente eines Drittanbieters) haben. Suchen Sie dann die Übereinstimmung, die Ihrem Fenster am nächsten kommt, und geben Sie dieses Verhältnis aus der Liste zurück.
quelle
Als alternative Lösung zur GCD-Suche empfehle ich Ihnen, anhand einer Reihe von Standardwerten zu prüfen. Sie finden eine Liste auf Wikipedia .
quelle
Ich gehe davon aus, dass Sie hier über Video sprechen. In diesem Fall müssen Sie sich möglicherweise auch um das Pixel-Seitenverhältnis des Quellvideos kümmern. Beispielsweise.
PAL DV ist in einer Auflösung von 720 x 576 erhältlich. Welches würde wie sein 4: 3 aussehen. Abhängig vom Pixel-Seitenverhältnis (PAR) kann das Bildschirmverhältnis nun entweder 4: 3 oder 16: 9 betragen.
Weitere Informationen finden Sie hier http://en.wikipedia.org/wiki/Pixel_aspect_ratio
Sie können ein quadratisches Pixel-Seitenverhältnis erhalten, und viele Webvideos sind das, aber Sie möchten vielleicht auch die anderen Fälle betrachten.
Hoffe das hilft
Kennzeichen
quelle
Basierend auf den anderen Antworten habe ich hier die Zahlen erhalten, die ich in Python benötigt habe.
quelle
Ein bisschen seltsam, aber verwenden Sie die Auflösung als Aspekt. Z.B
1024: 768
oder du kannst es versuchen
quelle
quelle
in meinem Fall möchte ich so etwas wie
quelle
Sie können jederzeit eine Nachschlagetabelle erstellen, die auf allgemeinen Seitenverhältnissen basiert. Überprüfen Sie https://en.wikipedia.org/wiki/Display_aspect_ratio. Dann können Sie einfach die Teilung durchführen
Bei Problemen im wirklichen Leben können Sie wie folgt vorgehen
Dann geben Sie einfach die Maße in beliebiger Reihenfolge an
quelle
?
quelle