wie skew Bild wie dieses
Will ich neigen ein Bild wie dieses, welche params muss ich einstellen für den Zusammenhang.setTransform?
- Wurden bereits beantwortet stackoverflow.com/questions/5293736/css3-transform-skew es ist die andere Weise, aber es ist die gleiche jsfiddle.net/rudiedirkx/349x9
- es ist nicht im Canvas-Bereich.
- Guter Punkt, habe nicht bemerkt, die "Kontext". Microsoft hat eine post, die erklären sollen, es, msdn.microsoft.com/en-us/hh969244 (gleiche Methode verwendet als Antwort unten)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erreichen dies mit einem einzigen 2D-Transformation.
Einer 2D-Transformation können Sie verfälschen das Bild "nach oben" oder "nach unten", indem die Tangente des Neigungswinkels in der zweiten argument
setTransform()
, aber Sie möchten, führen sowohl in einer symmetrischen Art und Weise (was eine "nearwards" und/oder "farwards" deformation). Sie benötigen eine 3D-Transformation zu tun.Jedoch, Sie emulieren kann das gleiche Ergebnis durch schneiden Sie das Bild in mehrere horizontale "Bänder" und die Anwendung eine andere Transformation, die beim Rendern jedes band. Bands, die weiter von der Hälfte des Bildes angewendet werden stärker skew-Winkel. So etwas wie:
Hinweis: die Bänder sind zwei Pixel hoch, statt eine zu vermeiden, die einen Moiré-Effekt.
Sehen Sie die Ergebnisse in diese Geige.
Hier ist eine Funktion, die ich schrieb, als ich spielte mit der Darstellung von pseudo-3d-Perspektive mit JS.
Im Gegensatz zu der Streifen-basierte transformation von Funktionen (die, zugegebenermaßen, sind vollkommen gut genug für die meisten standard-Anwendungsfälle) verwendet diese Funktion eine matrix von 4 Ecken, um eine benutzerdefinierte viereck, dass das ursprüngliche Rechteck verwandelt werden soll, zu.
Dies fügt einige Flexibilität und kann verwendet werden, um benutzerdefinierte render-Trapeze sowohl für "Gemälde-an-die-Wand" horizontale Perspektive und die "Teppich-auf-den-Stock" vertikale Perspektive (wie auch asymmetrische Quadraten, für noch mehr 3d-Gefühl).
Hier ist, wie Sie es nennen:
Trotz aller pro-pixel-Berechnungen es ist eigentlich ziemlich effizient, und es bekommt den job getan:
transformierte Bild
...aber es gibt vielleicht elegantere Wege, es zu tun.
Es ist eine Methode der Umwandlung eines Rechtecks in ein Trapez sehen,dieser stack overflow-Antwort. Allerdings müssten Sie dies für jedes pixel.
Könnten Sie auch schneiden Sie die Bild in vertikale Streifen 1 pixel breit und Strecken Sie anschließend die einzelnen Streifen aus seiner Mitte.
Nehme an, dies führt zu w-strips und Sie wollen, dass die linke Seite des Trapezes zu 80% von der rechten Seite dann
strip-n die Strecke sollte 1+n/(4w)