Heim > Web-Frontend > HTML-Tutorial > So lösen Sie das Problem verschwommener Schriftarten, Bilder und Grafiken, die auf der HTML5-Leinwand gezeichnet werden

So lösen Sie das Problem verschwommener Schriftarten, Bilder und Grafiken, die auf der HTML5-Leinwand gezeichnet werden

一个新手
Freigeben: 2018-05-11 14:49:49
Original
4162 Leute haben es durchsucht

Problem mit der Unschärfe von Schriftarten, Bildern und Grafiken auf der HTML5-Leinwand

Vorkommen

Tritt häufig auf Geräte mit hoher Auflösung, das bedeutet mehr Pixel pro Quadratzoll, wie z. B. Telefone und Tablets. Natürlich verfügen viele High-End-Desktop-Computer auch über hochauflösende und hochauflösende Monitore.

Das Skalierungsprinzip von Canvas im Browser

Wenn der Stil nicht festgelegt ist, dann das Breitenattribut von HTML Als Größe wird die Höhe verwendet.

Wenn die Breite und Höhe im Stil festgelegt sind, ist die Stileinstellung die endgültige Größe, die im Browser angezeigt wird.

Mit anderen Worten, die Breite und Höhe in den Attributen stellen nicht die tatsächliche Breite und Höhe dar, sodass die Leinwand bei hoher Auflösung vergrößert wird, was zu Unschärfe führt.

Die Breiten- und Höhenattribute der Leinwand sind die Größe des hinteren Puffers der Leinwand, die nach dem Zeichnen im Browser entsprechend der aktuellen dpi skaliert wird.

devicePixelRatio (Fenstermitglied) speichert das Verhältnis der Breite/Höhe des Attributs, das im Zustand mit hoher Auflösung vergrößert wird.

Fehlerlösungsfall

Suchen Sie online nach Leinwandunschärfe, es gibt zwei Lösungen Die Methode ist derzeit möglicherweise nicht geeignet.

Eine davon ist CanvasRenderingContext2D.translate(0.5,0.5);

Dies wird tatsächlich häufig im Bereich des 3D-Zeichnens verwendet, um den Pixelversatz zu handhaben Der 2D-Kontext von Move, Canvas hat sich bereits mit diesem Problem befasst.

Der andere BackingStorePixelRatio wird im neuen Browser entfernt und existiert nicht mehr.

var ctx = document.createElement("canvas").getContext("2d"),
        dpr = window.devicePixelRatio || 1,
        bsr = ctx.webkitBackingStorePixelRatio ||
              ctx.mozBackingStorePixelRatio ||
              ctx.msBackingStorePixelRatio ||
              ctx.oBackingStorePixelRatio ||
              ctx.backingStorePixelRatio || 1
Nach dem Login kopieren

我在研究时用了动态创建canvas的方法,样式的width/height乘以缩放比devicePixelRatio得到canvas的属性width/height。<br/>

Dies ist keine perfekte Lösung, da sich die DPI des Browsers ändert, z. B. Benutzereinstellungen oder das Verschieben des Fensters von einem Monitor mit hoher DPI. Tritt auf, wenn Monitore mit niedriger Auflösung angezeigt werden. (Mein normaler 23-Zoll-Monitor mit 1080p ist 1,25-fach und das Tablet 2,0-fach. Das Ziehen und Ablegen von Fenstern erfolgt)

<code><span style="font-size: 14px"><strong><span style="font-family: Microsoft YaHei">解决方法</span></strong></span><br/><span style="font-family: Microsoft YaHei; font-size: 14px">1、动态创建并监视window的onresize事件,根据<span style="font-family: Consolas">devicePixelRatio</span>重建canvas。<br/>2、动态调整canvas样式的宽高,同样监视onresize事件。再配合<span style="font-family: Microsoft YaHei">CanvasRenderingContext2D.scale动态缩放绘制内容的比例。</span><br/></span><span style="font-family: Microsoft YaHei; font-size: 14px">浏览器都没有devicePixelRatio改变的事件,或者dpi改变的事件,如果你知道,请留言。</span><br/></code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem verschwommener Schriftarten, Bilder und Grafiken, die auf der HTML5-Leinwand gezeichnet werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage