Ich habe das folgende Skript gefunden, um eine Bildverarbeitung zu einem Bild seit Javascript zu verwischen. Ich repliziert die Probe, aber ich verstand nicht, wie ein kleiner Teil dieses Skripts funktionieren könnte, zeige ich das Skript:Wie funktioniert dieser Gaussian Blur JavaScript-Algorithmus?
var gaussianBlur = function() {
var data = ctx.getImageData(0,0,canvas.width,canvas.height);
var px = data.data;
var tmpPx = new Uint8ClampedArray(px.length);
tmpPx.set(px);
for (var i = 0, len= px.length; i < len; i++) {
if (i % 4 === 3) {continue;}
px[i] = (tmpPx[i]
+ (tmpPx[i - 4] || tmpPx[i])
+ (tmpPx[i + 4] || tmpPx[i])
+ (tmpPx[i - 4 * data.width] || tmpPx[i])
+ (tmpPx[i + 4 * data.width] || tmpPx[i])
+ (tmpPx[i - 4 * data.width - 4] || tmpPx[i])
+ (tmpPx[i + 4 * data.width + 4] || tmpPx[i])
+ (tmpPx[i + 4 * data.width - 4] || tmpPx[i])
+ (tmpPx[i - 4 * data.width + 4] || tmpPx[i])
)/9;
};
// data.data = px;
ctx.putImageData(data,0,0);
delete tmpPx;
btnBlur.removeAttribute('disabled');
btnBlur.textContent = 'Blur'; }
Diese Funktion (gaussianBlur()
) auf eine HTML-Taste ausgelöst, so dass, wenn es angeklickt Es verarbeitet das Bild, um es unscharf zu machen, und dieser Vorgang wird entsprechend der Anzahl der Klicks auf den Button wiederholt. Der Teil des Codes, den ich nicht verstehe, ist, wenn es die for-Schleife beendet, alle mathematischen Operationen wurden auf der px
Variable gespeichert, aber in der nächsten Zeile Code ctx.putImageData(data,0,0);
, diese data
Variable nimmt nicht die neue geänderte Variable px
. Also frage ich mich, wie ist es möglich, dass die Leinwand mit dem Bild verschwommen dargestellt werden könnte, wenn data
Variable nicht geändert wurde data
Komponente (weil data.data = px
wie in den ersten Zeilen der gaussianBlur
Funktion gezeigt).
Meiner Meinung nach, diesen Code zu verstehen, habe ich ein data.data = px;
nach dem for-Schleife setzen würde, mit dieser Zeile Code ich sage, dass die neuen px
auf data.data
variabel eingestellt werden. Und mit ot ohne diesen Zeilencode funktioniert der Algorithmus. So bin ich verwirrt warum es trotz data.data
nicht durch den neuen px
Wert funktioniert. Bitte hilf mir, es zu verstehen.
Vielen Dank im Voraus
'px' * Verweise * das gleiche zugrunde liegende' Uint8ClampedArray', auf das 'data.data' verweist. Alle nicht [primitiven Typen] (https://developer.mozilla.org/en-US/docs/Glossary/Primitive) in Javascript sind Verweise. –