Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie überwindet man gezackte Kanten und verschwommene Ergebnisse bei der Größenänderung von Bildern mit Canvas?

DDD
Freigeben: 2024-10-22 20:40:03
Original
572 Leute haben es durchsucht

How to Overcome Jagged Edges and Blurry Results When Resizing Images with Canvas?

Beheben von Glättungsproblemen bei der Größenänderung von Bildern mithilfe der Leinwand in JavaScript

Die Größenänderung von Bildern mithilfe der Leinwand in JavaScript kann manchmal zu auffälligen gezackten Kanten oder Unschärfen führen. Um eine reibungslose Größenänderung zu erreichen, kann eine Technik namens „Down-Stepping“ eingesetzt werden.

In den meisten Browsern wird standardmäßig lineare Interpolation zur Größenänderung verwendet. Bei der bikubischen Interpolation, die glattere Ergebnisse liefert, wird eine größere Pixelumgebung verwendet. Browser implementieren die bikubische Interpolation jedoch normalerweise nicht direkt.

Beim Downstepping-Ansatz wird die Bildgröße wiederholt geändert, wobei jedes Mal ein kleinerer Skalierungsfaktor verwendet wird. Dadurch wird das Verhalten der bikubischen Interpolation nachgeahmt, während weiterhin die lineare Interpolation im zugrunde liegenden Browser verwendet wird.

Der folgende Codeausschnitt zeigt, wie Downstepping implementiert wird:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var img = new Image();

img.onload = function () {

    // set size proportional to image
    canvas.height = canvas.width * (img.height / img.width);

    // step 1 - resize to 50%
    var oc = document.createElement('canvas'),
        octx = oc.getContext('2d');

    oc.width = img.width * 0.5;
    oc.height = img.height * 0.5;
    octx.drawImage(img, 0, 0, oc.width, oc.height);

    // step 2
    octx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5);

    // step 3, resize to final size
    ctx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5,
    0, 0, canvas.width, canvas.height);
}
img.src = "//i.imgur.com/SHo6Fub.jpg";
Nach dem Login kopieren

Dieser Code erstellt eine temporäre Leinwand, oc, und ändert iterativ die Größe des Bildes, um es schließlich auf die endgültige Leinwand zu zeichnen. Bei jedem Größenänderungsschritt wird eine lineare Interpolation verwendet, durch deren Kombination nähert sich der Gesamteffekt jedoch einer bikubischen Interpolation an.

Die imageSmoothingQuality-Eigenschaft kann auch verwendet werden, um die Glättungsqualität in Chrome zu steuern, was eine direktere Möglichkeit zur Erzielung von Glätte bietet , wird aber noch nicht in allen Browsern unterstützt.

Das obige ist der detaillierte Inhalt vonWie überwindet man gezackte Kanten und verschwommene Ergebnisse bei der Größenänderung von Bildern mit Canvas?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!