Wie man Manipulieren Pixel mit dem HTML5-Canvas-Tag

Mit HTML5, können Sie die Daten eines extrahieren Segeltuch Tag in das darunter liegende Pixeldaten. Bearbeitung dieser Daten gibt Ihnen umfassende Kontrolle über Ihr Bild in Echtzeit. Sie können diese Daten für die Farbausgleich verwenden sowie für mit Ihrem eigenen Unschärfen experimentiert, schärft und Chroma-Key-Effekte.

Egal welches Format ein Bild wird gespeichert in auf dem Dateisystem wird als eine Liste von Pixeln angezeigt. Jedes Pixel wird dargestellt (in der Standard-32-Bit-System sowieso) durch vier Zahlen: RGBA. Der R stellt dar, wie viel Rot im aktuellen Punkt ist, G für Grün steht, und B steht für Blau. Der A steht für Alpha, die ein Maß für die Transparenz des Bildes. Jeder dieser Werte kann von 0 bis 255 variieren, wenn Sie ein Bild in die Bilddatenformat konvertieren, erhalten Sie eine riesige Auswahl von ganzen Zahlen. Jede Gruppe von vier Bildern repräsentiert ein einzelnes Pixel von Farbdaten.

Dieser Code ändert sich die Farbbalance eines Bildes:

 Funktion draw () {var Zeichnung = document.getElementById ( "Zeichnung") - var con = drawing.getContext ( "2D") - var original = document.getElementById ( "Original") - CANV_WIDTH = 200-CANV_HEIGHT = 200- / / das Original auf das canvascon.drawImage ziehen (original, 0, 0) - // das Bild bekommen dataimgData = con.getImageData (0, 0, 200, 200) - // Schleife durch Bild datafor (row = 0- Reihe lt; CANV_HEIGHT- Reihe ++) {for (col = 0- col lt; CANV_WIDTH- col ++) {// finden aktuelle pixelindex = (col + (Zeile * imgData.width)) * 4 - // in Farbe trennen valuesr = imgData.data [index] -g = imgData.data [index + 1] - imgData.data b = [index + 2] -a = imgData.data [index + 3] - // Farbe valuesr manipulieren - = 20 g + = 50-b - = 30 a = a - // verwalten Grenze conditionsif (r> 255) {r = 255-} if (r lt; 0) {r = 0-} if (g> 255) {g = 255-} if (g lt; 0) {g = 0-} if (b> 255) {r = 255-} if (b lt; 0) {b = 0-} if (a> 255) {a = 255-} if (a lt; 0) {a = 0 -} // gibt neue Werte dataimgData.data [index] = r-imgData.data [index + 1] = g-imgData.data [Index + 2] = b-imgData.data [index 3] = a-} // end col for-Schleife} // end Zeile für Schleife // zeichnen neues Bild auf canvascon.putImageData (imgData, 0, 0) -} // end function

Während der Codeliste ziemlich lang scheint, ist es wirklich nicht allzu schwer zu folgen:

  1. Zeichnen Sie ein Originalbild.

    Die Technik Sie extrahiert Daten aus einem Canvas-Element verwenden, so ein Bild zu ändern, müssen Sie es zunächst auf eine Leinwand zu zeichnen. Sie können die gewöhnlichen verwenden drawImage () Verfahren.

  2. Extrahieren Sie die Bilddaten.

    Das getImageData () Verfahren wird das Bild von der aktuellen Leinwand angezeigt und legt sie in einem großen Array von ganzen Zahlen.

  3. Machen Sie eine Schleife um die Zeilen zu verarbeiten.

    Bilddaten in Zeilen und Spalten aufgeteilt. Jede Zeile von 0 auf der Höhe der Leinwand, so stellen ein für Schleife durch die Reihen zu durchlaufen.

  4. Machen Sie eine weitere Schleife um die Spalten zu behandeln.

    Innerhalb jeder Zeile genügend Daten von 0 auf die Breite der Leinwand, zu gehen, damit eine zweite for-Schleife innerhalb der ersten zu machen. Es ist sehr üblich, ein Paar von verschachtelten zu verwenden, für Schleifen durch zweidimensionale Daten, wie Bildinformationen zu Schritt.

  5. Finden Sie den Index in imagedata für die aktuelle Zeile und Spalte.

    Das imagedata Array enthält vier Zahlen für jedes Pixel, also haben wir ein wenig Mathematik zu tun, um herauszufinden, wo die erste ganze Zahl für jedes Pixel ist. Die einfachste Formel ist die Zeilennummer durch die Breite der Leinwand zu multiplizieren, dass auf die Spaltennummer hinzufügen und das gesamte Ergebnis von vier multiplizieren.

  6. Ziehen Sie die entsprechenden Farbwerte aus dem Index.

    Der Index stellt auch den Rot-Wert des aktuellen Pixels. Der nächste int hält den Grün-Wert, durch den blauen Wert gefolgt, und schließlich den Alpha-Wert.

  7. Manipulieren die Farbwerte, wie Sie wollen.

    Wenn Sie vorhaben, ein Farbausgleich App zu tun, können Sie einfach addieren oder subtrahieren Sie die Werte Farbbalance zu ändern. Sie können auch sehr viel aufwendiger Arbeit tun, wenn Sie mit Pixel-Ebene Bildmanipulation zu spielen, um möchten.

  8. Prüfen Sie, ob Grenzen.

    Ein Pixelwert darf nicht niedriger sein als 0 oder größer als 255, so überprüfen Sie für diese beiden Grenzen und passen Sie alle Pixelwerte innerhalb der gesetzlichen Grenzen zu sein.

  9. Rückstellwerte zurück in die imgData Array.

    Sie können die Werte kopieren auf das Array zurück, und Sie sollten dies tun, um die Änderungen sichtbar zu machen.

  10. Zeichnen Sie die Bilddaten zurück auf die Leinwand.

    Das putImageData () Funktion zeichnet die aktuellen Bilddaten zurück auf die Leinwand wie ein gewöhnliches Bild. Die neue Version des Bildes wird die Änderungen widerspiegeln.

Menü