2017-02-22 7 views
2

Ich versuche, einen CSS-Filter hinzuzufügen, bevor ich das Bild auf meiner Leinwand zeichnen. Das ist mein Javascript.Hinzufügen eines Filters zum Bild vor dem Zeichnen auf Leinwand

img = new Image(); 
    img.src = "picture.png"; 
    img.crossOrigin = "Anonymous"; 
    img.style="filter: saturate(8);"; 

    context = canvas.getContext('2d'); 
    context.lineJoin = "round"; 
    context.lineWidth = cursorSize; 
    img.onload = function() { 
     context = canvas.getContext('2d'); 
     context.drawImage(this, 0,0,width,height); 
     layer.draw(); 
    }; 

Wenn ich dieses Bild in etwas anderes als die Leinwand laden, rendert es richtig. Aber ich sehe das gesättigte Bild nicht auf meiner Leinwand. Fehle ich etwas? Vielen Dank.

Antwort

6

Der CSS-Filter befindet sich oben auf dem Bildelement und ist nicht Teil des Bilds selbst. Wenn Sie also auf Leinwand ziehen, wird nur die Bitmap verwendet.

Glücklicherweise gibt es jetzt in einigen Browsern Unterstützung für CSS-Filter für den Kontext selbst. nach unten bewegen Sie einfach die Zeile für CSS-Filter auf das Bild, um den Kontext wie folgt aus (mit reduziertem Code aus Gründen der Klarheit):

var context = canvas.getContext('2d'); 
var img = new Image(); 
img.onload = function() { 
    context.filter = "saturate(8)";   // use CSS filter here 
    context.drawImage(this, 0, 0, width, height); 
    context.filter = "none";     // reset filter 
}; 
img.src = "picture.png"; 

Hinweis: nicht in allen Browsern unterstützt, die im Fall muss der Filter angewendet werden manuell und von Grund auf neu.

+0

Gibt es eine Möglichkeit, den Filter nach dem Zeichnen des Bildes zu setzen? –

+0

@AlexKonetchy Sicher, zeichnen Sie die Leinwand einfach neu: Zeichnen Sie das Bild wie es ist, setzen Sie die Filtereigenschaft, setzen Sie globalCompositeOperation auf copy (falls Alpha-Kanal beteiligt ist) und verwenden Sie drawImage mit Leinwand als Bildquelle. – K3N

+0

Okay, es ist so nah, aber gibt es eine Möglichkeit, den Filter umzuschalten? Ich zeichne das Bild 3 Mal neu. Das erste Mal ohne Filter. Das zweite Mal mit einem Filter. Wenn ich die Leinwand zum dritten Mal kopiere und zeichne, möchte ich sie wie das Originalbild ohne Filter zeichnen, aber jedes Mal bleibt der Filter bei dem, was ich beim zweiten Mal eingestellt habe. Canvas ist so neu für mich ... –

Verwandte Themen