Wie "smart resize" ein angezeigtes Bild, um die original-Seitenverhältnis
Ich habe eine Anwendung, in der end-Benutzer können die Größe und position der Bilder in einem designer. Da die spec fordert das Bild "gestreckt", um mit der Kontrolle, kann der Benutzer am Ende mit einer ungeschickt gestrecktes Bild.
Zu helfen, die Benutzer mit Bild sizing ich denke an der Umsetzung einer smart-resizer-Funktion, die es erlauben würde, die der Benutzer leicht zu beheben, das Seitenverhältnis des Bildes so, dass es nicht mehr verzerrt angezeigt.
Den schnellen Weg, um dieses Problem zu lösen ist, um tatsächlich geben Ihnen zwei Optionen: 1) Breite Skala von 2) Skala von der Höhe. Der Benutzer wählt die Methode und der Algorithmus passt die Größe des Bildes, indem Sie die original-Seitenverhältnis. Zum Beispiel: Ein Bild angezeigt wird als 200x200 auf den designer, aber das ursprüngliche Bild ist 1024x768 Pixel. Wählt der Benutzer "Smart Größe von Breite" und die neue Größe wird ~200x150, da die original aspect ratio) ~1.333
Ist das OK, aber wie könnte ich den Algorithmus intelligenter und sich nicht die Mühe, dem Benutzer durch Fragen, welche dimension die Neuberechnung sollte auf?
InformationsquelleAutor Paul Sasik | 2010-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich interpretieren deine Skillung richtig, Sie wollen ein Ergebnis, dass nicht größer ist, als die, die der end-Benutzer angelegt ursprünglich; Sie wollen eine der beiden Dimensionen zu schrumpfen, und die anderen gleich bleiben. In anderen Worten, die neue Größe zu füllen, die designer-Raum in eine Richtung, während die Verkürzung die Größe in der anderen Richtung behalten Sie die original-Seitenverhältnis.
Oft werden Sie das arbeiten mit ganzzahligen Koordinaten, aber die Spaltungen zu produzieren, die Verhältnisse, die oben sein müssen, floating point. Hier ist eine Umstellung der Formel, die mehr integer freundlich. Stellen Sie sicher, dass Ihre ganze zahlen haben den Bereich zu behandeln wird die maximale Breite*Höhe.
InformationsquelleAutor Mark Ransom
Hier ist eine Lösung, die ich kam mit, wenn man mit diesem problem umzugehen. Stellte sich heraus, ziemlich kurz und eindeutig imo, wollte nur, Sie zu teilen.
Handy "- Formeln":
ratio = W /H
→W = H * ratio
→H = W /ratio
In Javascript
originalSize
undnewSize
ist ein array[0] = width
,[1] = height
InformationsquelleAutor Jonathan Azulay
Es gibt keine Rechnungslegung für die Menge an Kopier-und Rollenwechsler gibt, eh! Ich wollte auch wissen, dies und alles, was ich sah, waren unendlich viele Beispiele der Skalierung der Breite ODER Höhe.. wer würde wollen, dass die anderen überlaufen?!
//////////////
InformationsquelleAutor Dominic
Nahm den Vorschlag oben gemacht und es scale-up/down innerhalb max Höhe /Breite. Hier der python-code für den es und fügte auch Unterstützung für rotierende Dinge, während in limites:
def _resize(Bild, Maße, rotate= "None"):
"""
Ändert die Größe eines Bildes so nah wie möglich an die angegebenen Dimensionen. Bild ist ein
django Bild-Modell-Bereich.
InformationsquelleAutor Jens Lundstrom
Weil Sie möchte, um zu zeigen, wie viel wie möglich das Bild skaliert (das original) in Ihrem Fenster, also der Bereich, in dem designer, würdest du die größeren von entweder der Breite oder der Höhe des original-Bildes, und Skala, die zu 200. Pseudo-code (width, height sind die Abmessungen des original):
InformationsquelleAutor Kevin Le - Khnle
Berechnung der neuen Dimensionen für beide Varianten ("Skala " Breite" und "Maßstab Höhe"), dann verwenden Sie die eine, die passt im display.
Alternativ könnte man auch berechnen das das Seitenverhältnis der "bounding box" und vergleichen Sie es gegen das Seitenverhältnis des ursprünglichen Bildes. Je nachdem, welches Seitenverhältnis ist größer, die Höhe oder die Breite skaliert werden muss.
Sie können auch beschränken die Größe Prozess, so dass in allen Fällen "die Skala "Breite" ist fertig. Dann ändern Sie die Größe des Bildes, der Benutzer hat jederzeit zu ändern dessen Breite. Die Höhe wird immer automatisch angepasst werden.
Ist es nicht beschränkt auf 200x200? Wo hat die aktuellen smart-size-Funktion erhalten Sie Ihre Grenzen aus?
wir sind immer in der Nähe. Die Grenzen sind implizit durch den Benutzer durch die Manipulation der Bilder, die Größe. Siehe meine Antwort an khnle unten.
Also, wenn der Benutzer in der Größe verändert, das Bild, können Sie nehmen Sie die neue Grenzen erstellt, und testen Sie, welche der beiden resize-Methoden wird für diese Arbeit die Grenzen? (Zusätzlich habe ich bearbeitet, einige mehr Ideen in meiner Antwort..)
InformationsquelleAutor sth
Meine Lösung zu schrumpfen und wachsen-Größe in javascript basiert auf https://stackoverflow.com/a/5654847/1055015
InformationsquelleAutor Exlord
Brauchen Sie nur, um die Waage benötigt für beide Dimensionen und nehmen Sie dann die kleinere der 2.
InformationsquelleAutor Matt Warren
hier ist meine Lösung,
a = Aspekt
sw = original-Breite des Bildes
sh = original-Höhe des Bildes
dw = ersuchte max Breite
dh = ersuchte max Höhe
sw und sh enthalten die endgültigen Werte geändert
code PHP:
InformationsquelleAutor Christopher Thomas
Ich benutzte diesen Weg, um die Größe des Bildes zu FHD Weise
können Sie ändern Sie die 1080 auf die neue Größe.
Ich hoffe, es ist nützlich für jemanden, der mindestens.
InformationsquelleAutor Abdulaziz Noor